关键字为priority_queue ( 大根堆 ) 和 priority_queue <int,vector<int>,greater<int>> ( 小根堆 ). 在一些定义了权重的地方这个数据结构是很有用的。 先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一 ...
分类:
其他好文 时间:
2018-05-26 16:44:46
阅读次数:
219
题解: 首先裸的dp很好想 f[i][j]表示在i点,最大值<=j的点数最大值 看了别人的题解知道了可以用线段树合并来优化这个东西。。 我们考虑对于每个点,首先我们要合并它的子树 其实就是对于相同位置的点相加即可 然后考虑当前节点,我们应用f[v[x]-1]+1去更新v[x]-n之间的值(也就是取m ...
分类:
其他好文 时间:
2018-05-19 15:39:19
阅读次数:
138
`Python` 二叉堆(binary heap) 二叉堆是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆。 当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆。 当父节 ...
分类:
编程语言 时间:
2018-05-06 10:40:22
阅读次数:
738
一、前言 之前用java实现堆结构,一直用的优先队列,但是在实际的面试中,可能会要求用数组实现,所以还是用java老老实实的实现一遍堆结构吧。 二、概念 堆,有两种形式,一种是大根堆,另一种是小根堆。堆,一般是二叉树,这个概念当然也可以扩展到k叉树。大根堆指的是根节点的值要大于左子树和右子树所有节点 ...
分类:
编程语言 时间:
2018-05-04 14:17:48
阅读次数:
192
4919: [Lydsy1706月赛]大根堆 Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点。每个点有一个权值v_i。 你需要将这棵树转化成一个大根堆。确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,j,如果i在树上是j的祖先,那么v_ ...
分类:
其他好文 时间:
2018-04-29 13:23:58
阅读次数:
159
回忆一下序列LIS,$f_i$表示长度为$i$的LIS的最大数最小是多少,每次找到$f_{1\cdots i-1}$中第一个$\geq a_i$的位置并用$a_i$更新它 搬到树上是差不多的,我们用multiset维护每个子树内的DP值,因为子树之间互不影响所以可以直接合并multiset,最后再用 ...
分类:
其他好文 时间:
2018-04-17 22:27:58
阅读次数:
179
"P1168 中位数" 一个大根堆,一个小根堆。胡乱搞搞就可以了,根据中位数的计算方法。 cpp include include include struct Min_heap { int tail; int data[100010]; int top() { return data[1]; } v ...
分类:
其他好文 时间:
2018-04-09 21:15:32
阅读次数:
128
原创文章,转载请注明出处!博客文章索引地址博客文章中代码的github地址# 预备知识 堆是一种特殊的树形数据结构,即完全二叉树。堆分为大根堆和小根堆,大根堆为根节点的值大于两个子节点的值;小根堆为根节点的值小于两个子节点的值,同时根节点的两个子树也分别是一个堆。 ... ...
分类:
编程语言 时间:
2018-04-07 17:43:51
阅读次数:
256
题面 "传送门" Sol 走到一个点的前提是所有的影响它的点都走到,并且它的时间为那些点的时间$max$与自己的最短路的$max$ 考虑$Dijkstra$ 每次松弛时候,把它影响到的点的防护罩减$1$ 如果某个点没有后继影响它的节点就丢到大根堆内 然后这个继续松弛 cpp include defi ...
分类:
其他好文 时间:
2018-03-31 23:13:17
阅读次数:
258