线段树
blzorro
这个作者很懒,什么都没留下…
展开
-
POJ 2828 Buy Tickets(线段树)
题意:有n个人(每个人价值为val[i])依次从外面往队伍中插队,每次都会插在第pos[i]个位置,原本在pos[i]及其后面的人将会往后移一位,按最后队伍的顺序输出这些人价值。思路:正着模拟显然超时,可以这样想,每次入队的人位置由两个因素影响,一来是他本身插队到的位置,第二个是后面的人插队使他往后移位。注意到最后差进来那个人位置一定不会改变,考虑到倒序插入队伍。现在我们观察插入到位置x的这个原创 2013-08-02 21:37:52 · 740 阅读 · 0 评论 -
HDU 2795 Billboard(线段树)
题意:在一块h*w的公告板上,每次贴上1*wi的横条,规则是每次必须贴在目前可以贴的地方中最上且最左的位置,输出每次贴在第几行。思路:data[i]中记录第i行剩下多少空间可贴,每次寻找最小的i,满足data[i]>=wi即可。然后更新data[i]=data[i]-w[i]。直接顺序查找data[i]无疑是超时的,这里可以考虑使用线段树,单点更新记录最大值。具体的方法是:初始原创 2013-07-31 15:05:40 · 633 阅读 · 0 评论 -
POJ 2886 Who Gets the Most Candies?(线段树)
题意:N 个小孩围成一圈,他们被顺时针编号为 1 到 N。每个小孩手中有一个卡片,上面有一个非 0 的数字,游戏从第 K 个小孩开始,他告诉其他小孩他卡片上的数字并离开这个圈,他卡片上的数字 A 表明了下一个离开的小孩,如果 A 是大于 0 的,则下个离开的是左手边第 A 个,如果是小于 0 的,则是右手边的第 -A 个小孩。游戏将直到所有小孩都离开,在游戏中,第 p 个离开的小孩将得到 F(原创 2013-08-03 17:44:57 · 877 阅读 · 0 评论 -
POJ 2528 & UVA 10587(线段树+离散+区间修改)
题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报。思路:线段树直接做会TLE+MLE,因此需要离散。所谓离散就是将区段进行压缩,但是又不改变区间的位置关系。方法就是将区段的端点值去掉相同的进行排序,举个例子:给定4个区间[2,4] [3,6] [8,10] [6,9],覆盖关系就是后者覆盖前者,每个区间染色依次为 1 2 3 4。现在我们抽取这4个区间的8个端点,2 4原创 2013-08-05 16:53:47 · 1203 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers(线段树)
题意:给一串整数,每次使区段增减一个数,或者查询区段内数字和思路:线段树模板题,用add标记。具体内容可参考代码或者刘汝佳训练指南。#include#include#define MAXN 100005typedef long long LL;LL n,Q,ql,qr,v,sumv[MAXN*3],a[MAXN],addv[MAXN*3],_sum;char op;void b原创 2013-08-05 12:46:52 · 647 阅读 · 0 评论 -
HDU 1698 Just a Hook(线段树)
题意:初始时整个区段值为1,然后每次使区段[L,R]内的值全部改为某个值,最后输出整个区段和思路:线段树区间维护,成段替换。模板题,具体方法见代码,或者参看刘汝佳训练指南。#include#include#include#define M ((R+L)>>1)#define ls (o<<1)#define rs (o<<1|1)#define lson ls,L,M#def原创 2013-08-04 22:30:08 · 617 阅读 · 0 评论 -
POJ 3225 Help with Intervals(线段树)
题意:区间交、并、减、补思路:用线段树的叶子节点记录该点是否被区间覆盖,因为有开区间的情况,因此考虑离散,将数值乘以2。U:把区间[l,r]覆盖成1I:把[-∞,l)(r,∞]覆盖成0D:把区间[l,r]覆盖成0C:把[-∞,l)(r,∞]覆盖成0 , 且[l,r]区间0/1互换S:[l,r]区间0/1互换区间修改容易做,但是加上区间异或就难了。我们考虑维护这样一棵原创 2013-08-09 10:48:32 · 1008 阅读 · 0 评论