线段树
文章平均质量分 65
流沙-岁月
这个作者很懒,什么都没留下…
展开
-
poj 2777
题意:在一个长度为n的数轴上染色,有m种颜色,用1到m表示,o次操作,每次操作为P A B或C A B C,C A B C 表示把区间[A,B]染成颜色C,P A B表示询问区间[A,B]有多少种颜色。 分析:线段树的入门题,旨在考lazy操作,也便是对区间的更新用一个标记记录下来,以便不用每次都一直更新至叶子结点。另外就是要用上位操作,因为颜色数目较少,最多只有30种,用一个in原创 2015-06-29 16:55:17 · 376 阅读 · 0 评论 -
poj 3667
线段树 题意:有一个线段,从1到n,下面m个操作,操作分两个类型,以1开头的是查询操作,以2开头的是更新操作1 w 表示在总区间内查询一个长度为w的可用区间,并且要最靠左,能找到的话返回这个区间的左端点并占用了这个区间,找不到返回0 好像n=10 , 1 3 查到的最左的长度为3的可用区间就是[1,3],返回1,并且该区间被占用了2 a len , 表示从单位a开转载 2015-07-14 15:00:25 · 285 阅读 · 0 评论 -
hdu 2795
题意:给一个w*h的矩形公布栏,有n个1*wi的海报要往上面贴,贴的时候要尽量在高的地方贴,相同高度的时候尽量往左贴,问最多能贴多少张海报(注意不能重叠)。 分析:使用线段树。用最低层的结点记录每一行的剩余最大宽度,父亲结点记录孩子结点的最大宽度,这样,每次都先考虑左孩子,再考虑右孩子,就能算出结果了。其实这题只要想明白最底层叶子结点从左往右的顺序代表着消息栏从高到底的顺序,此题便原创 2015-06-15 21:20:34 · 395 阅读 · 0 评论 -
poj 2886
题意: N个小孩围成一圈,他们被顺时针编号为 1 到 N。每个小孩手中有一个卡片,上面有一个非 0 的数字,游戏从第 K 个小孩开始,他告诉其他小孩他卡片上的数字并离开这个圈,他卡片上的数字 A 表明了下一个离开的小孩,如果 A 是大于 0 的,则下个离开的是左手边第 A 个,如果是小于 0 的,则是右手边的第 A 个小孩。游戏将直到所有小孩都离开,在游戏中,第 p 个离开的小孩将得到 F(p原创 2015-07-25 17:01:01 · 382 阅读 · 0 评论 -
poj 1436
题意:给出平面上一条垂线的坐标y1,y2,x,y1和y2分别代表垂线两个端点的纵坐标值,x代表横纵坐标。以三条线段为一组,要求输出有多少组里任意两条线段都是相互可见的。可见的定义为:有一条水平线段,能够直接的连接两条垂线,中间不经过其它垂线,则称这两条垂线相互可见。 注意:两条垂线仅端点相交,也算是可见的。 分析:实质就是线段树的区间更新问题,是poj2777区间染色问题的延伸原创 2015-07-11 11:40:46 · 394 阅读 · 0 评论 -
hdu 1698
线段树模板题,注意要用到lazy操作便是了。 代码如下:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define原创 2015-07-04 19:03:08 · 363 阅读 · 0 评论 -
hdu 1754 模板
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long long#define ULL unsigne原创 2015-06-15 10:11:34 · 391 阅读 · 0 评论 -
hdu 1394 逆序对
求逆序对的方法有暴力,归并,分治,线段树,树状数组等等,这里讲怎么用线段树求解。 以求 1,3,2,4 为例, 用暴力的方法求逆序数的话,主要是枚举每一个逆序对,比如枚举1 的后面有多少个数与它成逆序对,再枚举3。。。那么假如知道1的后面有多少个数是与它成逆序数的,不就可以更快的求解了吗? 首先,很明显,枚举一个数前面有多少个数与其成逆序对算出来的结果与枚举原创 2015-06-15 14:19:57 · 812 阅读 · 0 评论 -
poj 2828
题意:有n个人按给出的次序去排队并且会插队,每个人会给pos和id两个数字,pos表示会在哪里插队,id是那个人的编号,要求输出最后队伍的编号序列。 分析:正向模拟时由于不知道那个位置在将来会有人插队,因此必然会涉及到挪动队伍某个部分的情况,时间复杂度是o(n)的,因此我们可以想到逆向操作,最后一个人插队的位置是确定不变的,前面的位置会根据后面的而变。因此问题就变成了问pos前面是原创 2015-06-29 11:31:53 · 275 阅读 · 0 评论 -
hdu 1542 矩形面积并
如图:用一个水平线从下往上进行扫描,遇到a线段(cover=1),将其插入线段树中,线段树中的每个节点都有个cover值,初始都为0,因此第一条线段插入时不会覆盖其它线段(显然的)。接着是b线段(cover=1)插入线段树,与a线段产生覆盖的区间是第一次计算的面积,覆盖的区间相当于矩形长,再利用线段树中存的矩形纵坐标,可得到矩形宽,然后就能算出面积。接着是c线段插入线段树(cover=-1),原创 2016-05-16 21:18:23 · 345 阅读 · 0 评论