
堆
linkfqy
A link to FQY.
展开
-
【堆+链表】POJ2274 The Race
题面在这里这道题想法很简单,但是实现比较复杂…… 参考隔壁神犇zzk的题解。 昨天写好代码后,一WA到底,查了近一个小时……各位同学写的时候小心。第一问很简单,典型的逆序数(由于v很小,可以用数组代替树状数组)。 至于第二问,要求按顺序输出前10000个“超越事件”,自然就想到用堆来储存“超越事件”(这里使用了二叉堆) 用链表储存赛车的相对位置 每次从堆中取出一个超越事件,注意有可能是非法原创 2017-02-15 08:52:44 · 815 阅读 · 1 评论 -
【贪心】BZOJ2006 [NOI2010]超级钢琴
题面在这里其实就是超级钢琴的出处……考虑三元组(i,l,r)(i,l,r)表示以i为右端点,左端点在[l,r][l,r]范围的所有区间那么显然可以用ST算法快速求得这些区间内权值最大的区间,设其左端点为t然后就只用考虑(i,l,t−1)(i,l,t-1)和(i,t+1,r)(i,t+1,r)两个区间就可以了这些东西都可以用堆来维护示例程序:原创 2017-09-02 11:05:50 · 880 阅读 · 0 评论 -
【贪心】CodeChef PROTEPOI Protecting The Poison
题面在这里其实很显然,把所有蛇都投影到垂直的两个方向对两个方向分别进行扫描线就可以了示例程序:原创 2017-09-02 10:58:14 · 426 阅读 · 0 评论 -
【堆+贪心】BZOJ1150 [CTSC2007]数据备份Backup
题面在这里先把整个数组差分一下,问题就转化成了:从n个元素中选择各不相邻的k个,使得其加和最小用堆来维护。每次中堆中取出权值最小的一个元素xx,计入答案然后将其与相邻的两个元素l,rl,r合并为一个新的元素,权值为l+r−xl+r-x将新元素放入堆中如此k次即可。可以用双向链表维护元素的相邻关系。此方法的正确性在于:当从堆顶取得一个新元素时,就相当于撤销了xx,改为取ll和rr这样取的次数仍然等于取原创 2017-09-20 21:36:08 · 769 阅读 · 0 评论