
堆
cjk_cjk
这个作者很懒,什么都没留下…
展开
-
BZOJ1029 [JSOI2007]建筑抢修(贪心+堆)
【题解】 仅按T1或T2从小到大修理显然是不正确的 可以发现:对于某个建筑集合,若它们都能被抢修,则按T2从小到大的顺序修理是最优的 证明:(相邻交换法) 对于建筑物(a1,b1)与(a2,b2),(a,b)代表(T1,T2)且T前+a 实际修理时间 允许时间 实际修理时间原创 2015-01-31 00:59:28 · 886 阅读 · 0 评论 -
BZOJ2006 [NOI2010]超级钢琴(划分树+堆)
【题解】 (划分树做法) 要求出长度为l~r的前k大连续和,可以转化为k次求第i大连续和,这与划分树的作用有关 先把前缀和预处理出来。一段连续和为 S(j)-S(i),固定i之后为 S(i+len)-S(i-1) (i为起点,len为长度,len∈[l,r]) 这里面,若i一定,len就在固定区间内变动,连续和的k大值对应S(i+len)的k大值,问题就转化为"求给定区间的k大值",原创 2015-02-22 11:24:58 · 658 阅读 · 0 评论 -
[NOI2010]航空管制(贪心+堆)
【题解】 堆版本的 将贪心题强行转化为数据结构题 先按照相对起飞顺序限制(a,b)反向建有向图,每次找出入度为0的结点中k值最大的来起飞,再将它所指向的结点入度减1 这个过程可以用大根堆完成,每遇到入度为0的点就加入堆中,保证堆顶k值最大即可 由于此时加入堆的点,在以后一直是可用的,而题目又保证有解,所以这样处理第一问就行了 对于第二问的点i,让其"占着位置"却"禁止删除原创 2015-03-31 23:58:24 · 1626 阅读 · 0 评论 -
[NOI2010]超级钢琴(堆)
【题解】 先预处理出前缀和s[],问题转化为:求(s[j]-s[i])的前k大值之和 (0 对于每一次求最值的过程: 若i相同,相当于求max(s[j])-s[i],属于RMQ问题 若i不同,存下每个i对应的max(s[j])-s[i],并存入大根堆 k次询问,每次都从堆顶弹出一个元素,计入答案,并将该元素对应的三元组(i,L,R)拆成两个:(i,L,Fr-1)与(i,Fr+1,R)原创 2015-03-31 23:53:53 · 571 阅读 · 0 评论