数据结构-线段树
parting_soul
大道至简
展开
-
hdu 3308 LCIS(区间合并)
题目链接: hdu 3308 LCIS 题意:求给定区间最大上升序列的个数 #include #include #define maxn 111111 #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace std; int lsum[maxn<<2],rsum[maxn<<2],msum[maxn<<2]; int原创 2015-10-23 21:43:35 · 327 阅读 · 0 评论 -
poj 3667 Hotel(区间合并)
题目链接; poj 3667 Hotel 题意:有n个房间,m组询问,询问中第一个数字表示方式,1表示住人,后面的那个数表示住店的人数,2表示清空,后面跟着两个数字票p,q,表示从第p个房间开始数,q个房间清空,我们尽可能的要使人住在左边的房间且房间数必须连续,问你住店时从那个房间开始住; #include #include #define maxn 55555 #define lson l,原创 2015-10-20 21:30:50 · 292 阅读 · 0 评论 -
hdu 2711 Lost Cows(单点更新)
题目链接 : hdu 2711 Lost Cows 题目大意:有n头牛,编号从1到n,排成n行,现在它们的顺序打乱了,每一头牛站一行,现在只知道在它前面几行中比它编号小的头数,站在第一行的牛前面没有东西,所以输入数据从第二行开始,让你求牛此时的序列; 解析:比如 输入序列为 1 2 1 0 ,从左往右分别表示比第二行编号小的牛有1头,比第三行小的有2头....比最后一行小的有0头,我们可以从原创 2015-10-17 19:21:25 · 388 阅读 · 0 评论 -
hdu 1698 Just a Hook(成段更新)
题目链接 :hdu 1698 Just a Hook 题目大意:第一个数据为测试案例数,第二行为区间最大值[1,n],第三行为更新的次数m,下面有m行,每行一次更新,一行三个数a,b,c; 区间为[a,b],c为价值,有三种价值,1,2,3, 每一次更新把区间所有数的价值变为c,问你真个区间的价值,即求这个区间的和(用线段树维护区间的和) #include #include #def原创 2015-10-16 19:50:14 · 300 阅读 · 0 评论 -
hdu 1394 Minimum Inversion Number(成段更新)
题意:给你区间在[0,n-1]的整数,也就是n个数排成一行,下标从0开始到n-1,让你求它的逆序数之和,然后每次将最左边的的数移到末尾,重新求逆序数,这样有n组,让你求最小的逆序数之和,所谓逆序数,就是下标ix[j],让你求这样的数有几个。 比如 : 3 1 2 4 0 下标比三小,数值比三大的数没有,则对三来说满足条件的是零个 然后考虑1,下标比一小,数值比一大,対一来说满足的为1个 同原创 2015-10-15 10:25:41 · 272 阅读 · 0 评论 -
hdu 1556 Color the ball(成段更新)
题目链接 hdu Color the ball 先是用单点更新做,发现竟然超时,因为很多节点多次,重复被访问,复杂度就有点高了 然后用lazy的思想,每次更新操作,并不更新到叶子节点,因为有些即使更新了,也不会被用到,所以只更新到当前区间,等到下一次有需要时,则继续往下更新 超时代码和ac代码都附上 单点更新(超时) #include #include #include #def原创 2015-10-14 21:56:00 · 262 阅读 · 0 评论 -
hdu 2795 Billboard(单点更新)
题目链接 hdu 2795 Billbord 题目大意 :有一块高度为h,宽度为w的广告牌,现在有n张纸条,每次尽量要放在广告牌的最左边,最上方,纸条长度为wi,高度都为一,要你输出每次贴在广告牌上的位置 也就是第几行,因为纸条高度为一,可以看成有h行; 解析: 可以建立一个线段树,每一个叶子节点的区间边界为行数(叶子节点左边界等于右边界),每个节点保存的是此时每一行的容量,线段树维护原创 2015-10-14 19:42:36 · 312 阅读 · 0 评论 -
hdu 1754 I Hate It
题目链接 hdu 1754 I Hate It 线段树单点更新 求区间最大值 //线段树单点更新 #include #include #include #define maxn 222222 #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace std; int MAX[maxn<<2]; void pushup(原创 2015-10-12 20:50:20 · 332 阅读 · 0 评论 -
hdu 1166 敌兵布阵
题目链接 hdu 1166 敌兵布阵 线段树单点更新 求区间的和 //单点更新 #include #include #include #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define maxn 55555 using namespace std; int sum[maxn<<2]; void pushup(int rt)原创 2015-10-12 20:24:04 · 230 阅读 · 0 评论