
线段树
文章平均质量分 77
kaiweisun
这个作者很懒,什么都没留下…
展开
-
线段树简介
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时...原创 2012-07-05 16:18:41 · 124 阅读 · 0 评论 -
hdoj 1166
题意:略。 思路:基础的线段树,静态建树,更新结点,查询信息。代码如下: #include<iostream> using namespace std; const int Max = 50005; struct data { int l, r, num; }node[3*Max]; // 线段树节点的数据结构。 int num[Max];...原创 2012-07-05 16:22:39 · 132 阅读 · 0 评论 -
poj 3264
题意:Farmer John有n头牛按照编号顺序排好,第i头牛高度为hei[i],现在给出区间[a,b],问这个区间内的最高的牛和最低的牛相差多高。 思路:基础线段树。 静态建树,求区间最大值与最小值之差。跑得要点慢。 代码如下: #include<iostream> using namespace std; const int Max = 50005; ...原创 2012-07-06 14:34:15 · 126 阅读 · 0 评论 -
poj 3468
题意:给出[1,n]区间内每个点的数值,让你执行下面的操作: 1. C a b w : 区间[a,b]上所有点的数值加上w。 2. Q a b : 输出区间[a,b]上所有点的数值之和。 思路:经典线段树。静态建树,成段修改,区间求和。用普通的线段树去做肯定超时,因为成段修改的时候会是o(n)。关键在于用add记录对应区间内所有元素的增量,并对查询函数进行相应的修改。...原创 2012-07-06 14:34:46 · 106 阅读 · 0 评论 -
poj 2182
题意:FJ有n头牛,编号为1~n,它们并没有按照编号的顺序排好队列。现在,FJ只知道每一个牛前面有多少只牛的编号比它大。问你能不能判断出所有牛的编号。 思路:线段树。关键:每次最后一只牛的编号是可以确定的,即为pre[i]+1,将其编号从所有牛中删除,则倒数第二只牛的编号又可以确定为pei[i]+1,依此类推。 代码如下: #include<iostream> usi...原创 2012-07-06 14:40:01 · 85 阅读 · 0 评论 -
poj 2777
题意:长度为n(1~100000)个单位的画板,有t(1~30,位运算的可能性)种颜料。现在叫你完成m组操作: 1. "C A B C" Color the board from segment A to segment B with color C. 2. "P A B" Output the number of different colors painted betw...原创 2012-07-06 14:42:08 · 107 阅读 · 0 评论 -
poj 3368
题意:一个具有n(1~100000)个点的序列,从大到小排序,有一些点的大小是相等的,问区间[a,b]上,相等大小的点最多是几个。 思路:线段树+离散化。离散的运用:将连续的相等的一个区间的点集,聚集为线段树的一个节点,并且在这个节点上有信息能体现出这个区间的性质。 代码如下: #include<iostream> using namespace std; con...原创 2012-07-06 14:43:35 · 109 阅读 · 0 评论 -
poj 1823
题意:一个hotel,有n间连续的房间,现在有m组操作: type 1: '1, a, b': 第a个房间起的b个房间有旅客入住。 type 2: '2, a, b': 第a个房间起的b个房间的旅客离开。 type 3: '3': 问最长的连续空房间有多少间。 思路:线段树。这道题很好的利用线段树递归的性质,加深了对线段树递归的理解。复习了一下延迟的操作,...原创 2012-07-09 08:33:58 · 188 阅读 · 0 评论 -
poj 2528
题意:有n(1~10000)个市长的候选人,这个城市专门为他们安排了一个长为10000000的墙,他们每人可以按顺序帖自己的竞选海报到墙上,所有的海报与墙一样高,分别帖在墙的[a[i],b[i]]区间上。问最后能露出来被看到的海报有多少张。 思路:线段树+离散化。由于长度太大,无法直接建树,而n最大只有10000,故因考虑离散化。 例:区间[1,6], [1,7], [2,1...原创 2012-07-09 08:34:43 · 151 阅读 · 0 评论