线段树
Sor4
这个作者很懒,什么都没留下…
展开
-
POJ 3667 线段树区间合并
题意:一个旅馆有n个房间,m条操作,如果输入1 b 表示住进来b个人 然后输出这b个人住的房间编号最前面的那个,如果输入 2 b c, 就是说要将b到b+c-1的房间全部全部清空。 思路:此题更新操作简单,但是查询的时候不好做,这题要添加两个数组,lsum表示一个区间从最左端开始可用的且连续的最大长度,例如区间[1,5],覆盖情况为[0,0,0,1,1],lsum=3,从最左端有3格可以利用原创 2014-12-20 14:24:14 · 588 阅读 · 0 评论 -
HDU 1698 线段树的成段更新,懒人思想
这里解释下懒人算法的功能,懒人算法用于线段树的成端更新,意思就是说,当我更新的时候,不需要全部更新到底,用一个延迟标记来让更新延迟到下一次我需要更新这里或者询问这个区间的的时候。 懒人的思想通俗的说就是,我要更新一个区间,那我不用像用单点更新来更新父亲节点这种方法一样,我可以先将这里更新,然后在这里留下一个lazy的标记,当下次再次经过这个区间的时候,我在把上次遗留的问题一起解决,这里要注意无论原创 2014-12-02 11:50:22 · 648 阅读 · 0 评论 -
HDU 2795 线段树
题意:给你一个长方形的木板,往上面贴广告,广告的要求是如果第一行可以贴下那么就贴在第一行,而且尽可能的往左贴,最后输出这个广告贴在哪一行。给你高度h,宽度w的长方形木板和n个操作,下面有n行操作,每一行有一个数表示广告的宽度,所有广告的高度都是1.如果木板可以容纳这个广告就输出贴在哪行,如果不能就输出-1。 思路:因为之前别人介绍这道题的时候说这是道坑题,所以先百度看了一下坑的所在,这题的数据看原创 2014-12-09 19:37:00 · 392 阅读 · 0 评论 -
POJ 2528 线段树成段更新,数据离散化
题意:就是张贴海报,问最后可以看到有多少张海报。因为数据太大,直接建树会爆掉,所以要进行数据离散化。 数据的离散化意思是 比如说我有两张海报,一张从1-1000,另一张从30000-1000000,那我完全可以将第一张看成1-2,第二张看成3-4啊,这样数据量不就减少很多了么。我们只用对所有的点一次快排然后不同的点不断加1就行了,但是单单是这样还是不行,比如1-10,1-3,6-10,这样按照上原创 2014-12-02 11:56:07 · 407 阅读 · 0 评论 -
HDU 1166
#include int tree[200005]; void pushup(int id) { tree[id]=tree[id } void build(int l,int r,int id) { if(l==r) { scanf("%d",&tree[id]); return ; } int mid=l+r>>1; build(原创 2014-12-01 22:29:54 · 389 阅读 · 0 评论 -
HDU 1394
题意:就是给出一串数,当依次在将第一个数变为最后一个数的过程中,要你求它的最小逆序数。 用线段树求逆序数,求最小逆序数的时候有个巧妙的想法,当把x放入数组的后面,此时的逆序数应该为x没放入最后面之前的逆序总数加上(n-x)再减去(x-1);sum = sum+(n-x[i])-(x[i]-1)。 #include #include using namespace std; i原创 2014-12-01 22:33:09 · 345 阅读 · 0 评论 -
HDU 5023
题意:和POJ 2777类似,建n的线段树,然后m个操作,P a b c 表示将ab区间的颜色换成c,Q a b表示查询ab的颜色,输出区间的颜色,按照从小到大的顺序,POJ 2777是输出区间颜色的个数。 思路:用位运算进行加速,lazy【id】表示的是我当前的第id位变成1之后转化成10进制的数。 比如大小为3的树,我给id=3的位置涂颜色3,那么我就将二进制从后往前数第3位变成1,就相当于原创 2014-12-22 21:52:27 · 278 阅读 · 0 评论 -
poj 3264 线段树水题
#include #include using namespace std; #define maxn 55555 int sum1[maxn int maxx,minn; void pushup(int id) { sum1[id]=max(sum1[id sum2[id]=min(sum2[id } void build(int l,i原创 2014-12-21 16:12:46 · 317 阅读 · 0 评论 -
HDU 4267 线段树区间内部某个值更新
题意:输入N 下面有N个数, Q个操作,对于每次操作 有两种情况。 情况1.输入1 a b k c,表示更新操作,将a-b区间内的符合a 情况2:输入2 a 表示查询操作,输出a 上的值。 思路:对于这种不是对整个区间都进行更新的操作,似乎lazy算法就没什么用了,这题一开始看的感觉是单点更新,但是看下数据量 单点更新根本不可行。那我们可以想一下他给的条件,(i-a)%k==0,原创 2015-05-10 14:35:27 · 342 阅读 · 0 评论