一个黑科技,不知道是谁发明的(好像也有些年代了?) 其实这个黑科技的本质就是一个大根堆,不同的是 它支持删除堆内任意元素,同时也支持堆的基本操作 code 代码如下: 结构介绍 解释一下两个堆 $q1$ 和 $q2$ : q1 $q1$ 存储了当前所有元素(包括未删除元素) q2 $q2$ 存储了 ...
分类:
其他好文 时间:
2019-03-19 12:37:22
阅读次数:
299
1,从无序的数据流中找到其中位数:(用大根堆和小根堆来实现) 1 float getMidimum(vector<int>& nums) { 2 priority_queue<int> bigHeap; // 大数优先 3 priority_queue<int, vector<int>, great ...
分类:
编程语言 时间:
2019-03-15 17:39:16
阅读次数:
177
[toc] 什么是堆 堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 通常将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。 堆的存 ...
分类:
编程语言 时间:
2019-03-10 23:30:51
阅读次数:
372
传送门:https://www.luogu.org/problemnew/show/P3317 这道题的推导公式还是比较好理解的,但是由于这个矩阵是小数的,要注意高斯消元方法的使用; #include <algorithm> #include <iterator> #include <iostrea ...
分类:
其他好文 时间:
2019-03-09 23:13:39
阅读次数:
199
用途 可在log复杂度合并的堆 性质 每个节点有一个距离,具体定义我不知道 1.满足堆的性质 2.左子节点距离>=右子节点 3.节点距离=右子节点距离加1 实现 按照以上的性质实现merge(x,y),先选出x,y中比较大的那个(大根堆为例),再拿它的右儿子和另一个去merge,如果merge出来不 ...
分类:
其他好文 时间:
2019-03-06 20:44:59
阅读次数:
219
堆:什么是堆?又该怎么理解呢? ①堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值; ·堆总是一棵完全二叉树。 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。 ②堆是在程序运行时,而 ...
分类:
其他好文 时间:
2019-02-14 17:51:01
阅读次数:
208
题目链接: "戳我" 就是尽可能地选取排名小的,加起来就可以了。然后我们考虑利用一个大根堆,一个一个合并,如果超过派遣的钱,我们就把费用最大的那个忍者丢出队列。 左偏树,作为一个十分优秀的可并堆,我们这道题利用的就是这个数据结构。 左偏树不会? "戳我" 这里有一张来自HolseLee dalao的 ...
传送门: 题意: 将一个数字串分成许多不同的小串,使得这些小串代表的数字严格递增,要求最后一个数字尽可能地小。 然后满足字典序尽可能大。 思路: 由于最后一个数字要尽可能地小,所以先处理出每个数的L【i】, 即第i位最少要和L【i】这个位子的值组合才能满足要求。求出L【i】后,固定好最后的数的大小。 ...
分类:
其他好文 时间:
2019-01-28 16:40:15
阅读次数:
250
传送门 题意: 有m个区间,n个a[ i ] , 选择若干个区间,使得整个数组中的最大值和最小值的差值最小。n<=1e5,m<=300; 思路: 可以知道每个i,如果一个区间包含这个点,就让这个区间发挥作用。枚举每个i,找到最大值即可。 当然这个复杂度不对,我们可以通过线段树保存数组的最大值和最小值 ...
分类:
其他好文 时间:
2019-01-24 21:55:02
阅读次数:
306
https://codeforces.com/contest/551/problem/E 分块真强。 题意就是1、区间加,2、询问整个区间中,最远的两个x的距离。 分块,然后,每次找位子用二分找即可。 #include <algorithm> #include <iterator> #include ...
分类:
其他好文 时间:
2019-01-23 11:41:01
阅读次数:
194