线段树
文章平均质量分 85
jz-nice
这个作者很懒,什么都没留下…
展开
-
hdu1394(线段树求逆序数)
题目链接:hdu1394思路:先用线段树求出原始序列的逆序对数。序列中的n个数的范围是0~n-1,这点需要注意,根据这点可以很快速的求出改变后的序列的逆序对数。把位于第一位的num[i]移到最后一位,则变化的逆序对数是在上一个序列(即num[i]为第一位的序列)的基础上加上比num[i]大的数的个数,再减去比num[i]小的数的个数(因为num[i]移到最后以后,只能与前面比他大的数构原创 2013-12-02 16:43:02 · 1215 阅读 · 0 评论 -
nyoj117求逆序数(离散化+树状数组/归并排序)
题目链接:nyoj117树状数组思路:首先将输入的数组离散化,使各个元素比较接近,而不是离散的。离散时用一个结构体,val表示原来输入的数,pos表示下标;接着对结构体按val的大小排序,此时,val和结构体的下标就是一个一一对应的关系,而且满足原来的大小关系。然后用数组reflect存储原来所有的大小信息。#include #include #include #include原创 2013-12-01 21:26:52 · 1001 阅读 · 0 评论 -
hdu1698(线段树成段更新+lazy标记)
题目大意是:给一组棍子染色,不同的颜色有不同的值,执行一系列的区间染色后,问这组棍子的总值是多少。思路:lazy标记:就是更新时,不更新到最底层。num表示线段树结点所代表区间的染色状况,如果该区间全为同样的颜色,则用1,2,3表示,如果含有多种颜色,则用-1表示。每次执行染色操作时:(1)如果所要染的颜色与区间颜色一样,则停止。(2原创 2013-07-08 18:03:36 · 1385 阅读 · 0 评论 -
hdu2852(线段树求第k大数)
题目链接:/*hdu2852 线段树求第k大数题意:有三种操作,1、0 x 向容器中插入一个数x 2、1 x 在容器中删除一个数x 3、2 x k,求出容器中大于x的第k个元素。思路:求出容器中大于x的第k个元素,可以先求出<=a的元素的数量cnt,然后就等价于求区间[1..N]中第Kth = cnt+k的元素…注原创 2014-04-16 20:59:20 · 1291 阅读 · 0 评论 -
poj2828(线段树解插队问题)
题目链接:/*题意: n个人,每一行两个数,pos和val,pos表示这个价值为val的数要插入到位置为pos的数后面,最后按位置顺序输出思路:线段树 考虑倒着插入队列,因为后插入队列的元素一定不会受到先插入队列元素的影响每次插入时,我们考虑当前结点左儿子中空位的个数 如果左儿子中的空位置个数s[rt=num,向左儿子中插 如果左儿子中的空位置个数s原创 2014-04-07 16:30:32 · 733 阅读 · 0 评论 -
zoj1610(线段树成段覆盖,lazy标记)
题目链接:zoj1610/*zoj 1610 Count the Colors 线段树成段覆盖,lazy标记题意:给一段区间染色,后染的颜色会覆盖掉以前的颜色问最后能看到的颜色以及有几段区间是这种颜色思路:需要注意的是对区间染色,而不是对点染色,叶子节点的left和right表示的是区间例:left = 1,right = 2,表示的是区间1和2,即点0~3之间的区间*/原创 2013-12-03 15:37:53 · 1215 阅读 · 0 评论 -
ural1019Line Painting(离散化,线段树)
题目链接:ural1019跟poj2528(题解)离散方法相同,不过这道题离散化后还要记录每个数离散前的值/*ural 1019 Line Painting 线段树区间成段覆盖题目大意:给一条线段,初始为白色,之后给一系列操作,将[a,b]涂为黑色或白色,最后统计出白色最长的一段,输出左右区间。思路:由于区间特别大,所以先离散化。注意题目给的区间都是点,而涂的颜色是线段所以不原创 2013-12-05 21:03:12 · 1021 阅读 · 0 评论 -
poj1436(线段树成段更新)
题目链接:/*poj1436成段更新(难点:端点的处理)题意: n条竖直线段,每行输入y1,y2,x,分别表示线段下端点,上端点,横坐标定义两天线段可见:如果一条水平线段连接它们,且在它们之间不经过其它线段。最后求有多少组3条线段是两两可见的。思路:首先将所有线段按x坐标的大小进行排序,然后对y轴建树对每一条线段执行查询操作,查询当前线段区间内可见线段有哪些,并记录,然后更原创 2014-04-11 11:00:56 · 803 阅读 · 0 评论 -
hdu2871(线段树区间合并+vector+二分)
题目链接:poj2871原创 2014-04-12 16:52:59 · 794 阅读 · 0 评论 -
hdu1828&poj1177(线段树求矩形交周长,扫描线)
题目链接:hdu1828原创 2014-04-12 20:57:43 · 1028 阅读 · 0 评论 -
hdu3397Sequence operation(线段树区间合并)
题目链接:hdu3397线段树区间合并,和poj3667类似,都是老套路。。。#include #include #include #include #include using namespace std;#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1const int N = 200005;struct nod原创 2014-01-13 12:58:25 · 949 阅读 · 0 评论 -
hdu3308 LCIS(线段树区间合并)
题目链接:hdu3308/*hdu3308 LCIS 线段树区间合并题目大意: 求一段区间内的连续最长思路: 记录以区间左端点开始的LCIS,以区间右端点结尾的LCIS以及整个区间的LCIS,区间左端点的数和区间右端点的数。更新和建树操作都应更到叶子节点,只有叶子节点的信息时可以直接得出,然后递归回到父节点,父节点可以根据左右孩子的信息来更新自己*/#include原创 2014-01-12 16:38:43 · 1042 阅读 · 0 评论 -
poj3468(线段树成段更新)
链接:poj3468/*poj3468 A Simple Problem with Integers成段更新,区间求和题目大意:首先给出一个数列,表示初始值,然后两种操作,查询某段区间的和,和更新某区间所有数,每个数加上add思路:lazy思想add不为零时表示区间内所有的数同时加上add更新时不直接更新到底*/#include#include#includeusing原创 2013-12-04 12:47:57 · 740 阅读 · 0 评论 -
poj3777(线段树成段覆盖)
题目链接:poj3777/*poj 2777 Count Color 线段树成段覆盖,lazy题目大意:一段区间,初始值为1,两种操作,一种是修改,一种是查询思路:线段树区间成段更新*/#include#include#includeusing namespace std;#define N 100005int n,color;struct node{ int原创 2013-12-03 19:38:35 · 874 阅读 · 0 评论 -
poj3264(线段树求区间最大最小值)
题目链接:poj3264简单题,求区间最大值和最小值#include#include#includeusing namespace std;#define N 1000010int n,a[N];int ans_x, ans_y;struct node{ int r,l; int maxx,minn;}s[N<<2];void build(int l,原创 2013-12-05 09:00:32 · 2355 阅读 · 0 评论 -
poj2528(离散化,线段树成段覆盖)
题目链接:poj2258学习离散化的一个好题。。。/*poj 2258 Mayor's posters 离散化,成段覆盖题目大意:不断的有海报覆盖在以前的海报上,求能看到几张海报思路:因为数据范围是1~10^7,所以需要离散化首先依次读入线段端点坐标,存于pos[N][2]中,pos[i][0]存第一条线段的起点,pos[i][1]存第一条线段的终点,然后用一个结构题数组l原创 2013-12-04 19:22:50 · 1895 阅读 · 1 评论 -
hdu1542/poj 1151 (线段树&离散化&求矩形面积并)
题目链接:poj1151 hdu1542/*hdu 1542 Atlantis/poj 1151 Atlantis题意:求矩形面积并思路:将x离散化后建树(以区间建树),将矩形分为上下两边,上边为入边,下边为出边,从下往上扫描注意建树使用区间建树,即线段树的节点表示的是线段,而非端点PS:扫描线,黑书412页*/#include#include#includeusing原创 2014-01-08 19:46:00 · 1113 阅读 · 0 评论 -
poj3225(线段树求区间交,并,补)
题目链接:poj3225看了好久才看明白。。。。/*题意:区间操作,交,并,补等思路:我们一个一个操作来分析:(用0和1表示是否包含区间,-1表示该区间内既有包含又有不包含)U:把区间[l,r]覆盖成1I:把[-∞,l)(r,∞]覆盖成0D:把区间[l,r]覆盖成0C:把[-∞,l)(r,∞]覆盖成0 , 且[l,r]区间0/1互换S:[l,r]区间0/1互换成段覆盖的操原创 2014-01-09 16:35:14 · 1183 阅读 · 0 评论 -
poj3667(线段树区间合并)
题目链接:poj3667/*poj 3667 Hotel 线段树区间合并题意:操作1:询问是否有连续x间房间可以住,输出最左端的房间位置操作2:顾客退房,将房间清空,表示没有人住思路:利用线段树建立模型,维护最大连续区间长度,其中区间长度就是对应的房间数目,并且对应区间中最左边的端点就是ans,同时因为需要求出连续区间的最大长度,因此每次PushUp时都将左右区间合并,lsum原创 2014-01-09 20:23:02 · 1403 阅读 · 0 评论 -
hdu2795(线段树单点更新)
题目链接:hdu2795/*线段树单点更新题目大意:有一块板子,长宽分别为W,H,然后有n块1*w海报让你把这n快海报贴在这块板子上,尽量往板子的上方贴,同一行尽量往板子的左边贴。对于第i块海报如果能够贴下则输出能贴在第几行,否则输出-1。思路:利用线段树求区间的最大值;maxx表示区间内能贴的海报的最大宽度建树的时候要注意,heigh的范围特别大当heigh>=m(m是海报的原创 2013-12-03 11:19:18 · 894 阅读 · 0 评论 -
zoj2301Color the Ball(线段树,离散化,成段更新)
题目链接:zoj2301和poj2528做法基本一样,建议先做poj的那道题/*zoj2301Color the Ball 线段树区间成段更新,离散化题目大意: 一些连续的球,编号从1~2^31-1,最初球都是黑色的输入涂色的区间和要涂的颜色,将区间内的球都涂色(端点处的球也涂色)输出连续的且都是白色球的最长的区间,相同的话输出坐标小的*/#include#includ原创 2014-01-12 15:59:37 · 1193 阅读 · 1 评论 -
hdu3265(线段树求矩形面积并)
题目链接:hdu3265/*hdu 3265 扫描线求面积并题意:一个矩形的海报中间被挖出一块矩形的空白,将许多个这样的海报贴在窗户上,问最后窗户被覆盖的面积思路:将一张海报可分为四个部分,然后用扫描线求矩形面积并即可需注意的是答案会超int*/#include#include#includeusing namespace std;#define lson l, mid,原创 2014-04-13 14:29:33 · 686 阅读 · 0 评论