
数据结构/线段树
线段树
kelianlee
这个作者很懒,什么都没留下…
展开
-
Minimum Inversion Number HDU - 1394
线段树求逆序数#include <iostream>#include <algorithm>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const int MAXN=5555;int stree[MAXN<<2];...原创 2019-03-06 19:21:32 · 144 阅读 · 0 评论 -
Hotel POJ - 3667(线段树区间合并)
不错的一道区间合并的问题为什么自己总喜欢写 (l-r+1)!!!!!!!!#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;#define lson l,mid,rt<<1#d...原创 2019-03-18 00:27:17 · 209 阅读 · 0 评论 -
Farming HDU - 3255 线段树求立体几何
1a很舒服,#include <iostream>#include <vector>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;#define ll long long#define lson l,mid,rt&...原创 2019-03-24 23:38:12 · 176 阅读 · 0 评论 -
L3-002 特殊堆栈
简单线段树求区间第k大数#include <iostream>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const int MAXN=111111;int stree[MAXN<<2];void pushup(int rt)...原创 2019-03-25 01:08:00 · 245 阅读 · 0 评论 -
Help with Intervals POJ - 3225(线段树)
线段树模拟区间的交并等操作,真是恶心的一题,#include <iostream>#include <cstring>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define MAXN 131072int cont[MAXN...原创 2019-03-13 19:56:56 · 120 阅读 · 0 评论 -
Picture HDU - 1828(线段树求多边形周长)
有两种方法,第一种就是用两条扫描线扫出来然后求和,对于会wa的数据就是对扫描线排序的时候要注意,第二中方法就扫一次然后求出连续区间的个事因为高就是连续区间的个数*2#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <...原创 2019-03-22 18:25:51 · 212 阅读 · 0 评论 -
覆盖的面积 HDU - 1255 面积的交
1.cnt>1 : 说明该区间被覆盖两次或以上,那么长度就可以直接计算,就是该区间的长度剩下的情况就是cnt=1或cnt=02.先看叶子节点,因为是叶子没有孩子了,所以被覆盖两次货以上的长度就是0(无论cnt=1或cnt=0都是0,因为是叶子。。。)3.不是叶子节点 ,且cnt=1.注意这里,cnt=1确切的意义是什么,应该是,可以确定,这个区间被完全覆盖了1次,而有没有被完全覆...原创 2019-03-23 15:13:08 · 114 阅读 · 0 评论 -
Get The Treasury HDU - 3642(线段树求矩形面积交加强)
求立体几何的交体积,与二维求矩形面积交相同,写个模板#include <iostream>#include <algorithm>#include <cstdio>#include <vector>#include <cstring>using namespace std;#define lson l,mid,rt&...原创 2019-03-24 01:52:44 · 152 阅读 · 0 评论 -
Nico Number ZOJ - 3886(线性筛+线段树区间更新取模)
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const in...原创 2019-04-09 15:29:32 · 175 阅读 · 0 评论 -
2018ACM上海邀请赛A Simple Problem with Integers(找规律区间取模)
题意对于一个序列,进行以下两种操作:1、C L R 修改区间[L,R]上每个值为本身的平方,取mod 20182、Q L R 查询区间[L,R]的数值和通过打表发现所有的数在前几项之后会进入循环部分,最大循环节为6,又所有未进入循环的部分<5所以我们对区间的维护是这样 的,定义sum[][]为这个节点的后6个数字,因为循环节是6所以我只要记录6个数字就可以,p[]为这个节点在...原创 2019-04-09 19:42:28 · 161 阅读 · 0 评论 -
ACM-ICPC 2018 徐州赛区网络预赛(线段树维护前缀和)注意!每次pushdown是否要相应的pushup
题意a[l]×L+a[l+1]×(L−1)+⋯+a[r−1]×2+a[r](LLis the length of [ll,rr] that equals tor - l + 1r−l+1).题解将原式转化成:sum(1,l)+sum(1,l+1)+sum(1,l+2)....+sum(1,r)-(l-r+1)*sum(1,l-1)用数组存储前缀和就可以#inclu...原创 2019-04-16 14:45:12 · 357 阅读 · 0 评论 -
2018上海大都会赛 F color it(扫描线)
题意给你一个网格点,在点上画几个圆问网格点剩下的点有几个题解把网格的每一行看作扫描线,扫描整个网格,对于每个圆在每一行有左右两点的坐标,求出来放在vetctor中,最后将每行的vector排序,先对起点排序对与起点相同的点对终点排序,然后遍历每个vt,记录前一个的终点坐标#include <iostream>#include <cstdio>#incl...原创 2019-04-10 00:00:49 · 131 阅读 · 0 评论 -
Stars in Your Window POJ - 2482
你窗前的星星纵时光飞逝如梭,也我对你的回忆也永不黯然。从第一次见面以来,也许已经有四年之久了。但是,我记得,我清晰地记得,四年前的那一天,那一幕,那一抹阳光,那一弯微笑,它们如同刻刀一般,在我心中留下了如此清晰的印记。...原创 2019-03-24 18:59:36 · 179 阅读 · 0 评论 -
Bracket Sequence 区间合并 看不懂!!!留坑
留原创 2019-03-17 19:28:25 · 359 阅读 · 0 评论 -
Billboard HDU - 2795
简单线段树,把h看成线段树上的一个点,对于每个点都有一个w,对单点做减操作#include <iostream>#include <algorithm>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const int MAXN=22...原创 2019-03-06 20:06:59 · 157 阅读 · 0 评论 -
Horizontally Visible Segments POJ - 1436
简单线段树维护#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#define lson num<<1,s,mid#define rson num<<1|1,mid+1,e#define maxn 8005us...原创 2019-03-14 00:26:56 · 158 阅读 · 0 评论 -
Buy Tickets POJ - 2828(线段树单点更新)
思考这样的一个问题,将数据离线操作之后,最后一个人的位置是确定的,因为后面没有数据改变他的位置了,然后对于倒数第二个数据我们找到他的位置是不是在空余的位置中数出第几个空位然后将其填入,所以就可以用线段树来维护单点了。#include <iostream>using namespace std;const int MAXN=222222;int stree[MAXN<...原创 2019-03-06 21:22:45 · 135 阅读 · 0 评论 -
敌兵布阵 HDU - 1166(线段树)
第一道线段树,没有想象中难时间复杂度为logn#include <iostream>#include <string>using namespace std;const int MAXN=55555;int stree[MAXN<<2];void build(int l,int r,int rt){ if(l==r) { int ...原创 2019-03-04 20:51:55 · 102 阅读 · 0 评论 -
I Hate It HDU - 1754(线段树)
区间更新,区间求最大值#include <iostream>#include <algorithm>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const int MAXN=222222;int stree[MAXN<<...原创 2019-03-04 21:29:38 · 125 阅读 · 0 评论 -
Crane POJ - 2991(线段树+计算几何)
线段树维护角度,把线段看成向量然后旋转这个部分有点不好想#include <iostream>#include <cmath>#include <cstring>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const i...原创 2019-03-14 23:43:15 · 272 阅读 · 0 评论 -
Who Gets the Most Candies? POJ - 2886(反素数打表+线段树+约瑟夫环)
关于反素数的问题就不在说名,可以自己找题目去做这里讲一下自己对约瑟夫环问题的理解,如果有错希望有人指明,,因为看了很多博客都没怎么看懂,自己想了一下:这个问题线段树能处理的剩余空余的位置中的第几个位置,比如第一个2走了之后剩余3个人线段树可以找出剩余3人中的第几个,现在的问题就是怎么将剩余的几个人的第几个找出来,打表代码#include <iostream>usi...原创 2019-03-10 23:07:24 · 171 阅读 · 0 评论 -
Just a Hook HDU - 1698(线段树lazy标记)
懒得标记的第一题,写一下就能理解这个奥妙,能使线段树更加的优化#include <cstdio>#include <algorithm>using namespace std; #define lson l , m , rt << 1#define rson m + 1 , r , rt << 1 | 1const int max...原创 2019-03-11 12:47:11 · 153 阅读 · 0 评论 -
A Simple Problem with Integers POJ - 3468(线段树)
区间增减懒惰标记#include <iostream>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define ll long long #define MAXN 111111ll stree[MAXN<<2];ll cont...原创 2019-03-11 19:57:01 · 110 阅读 · 0 评论 -
uestc 1425 Another LCIS(成段更新)
#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm> #define lchild left,mid,root<<1#define rchild mid+1,right,root<<1|1using namesp...转载 2019-03-17 16:47:07 · 146 阅读 · 1 评论 -
Mayor's posters POJ - 2528(线段树+离散化区间压缩)
所谓的离散化就去简单的区间压缩,这题要注意的点是记得初始化更新,然后用vector的话记得i不能小与vt.size因为在push——back的时候这个size会一直变#include <iostream>#include <vector>#include <algorithm>#include <cstring>using name...原创 2019-03-12 20:30:32 · 148 阅读 · 0 评论 -
Atlantis HDU - 1542(线段树+扫描线+离散化)
对于扫描线与离散化的理解比较简单难点在与r-1与r+1的操作,对于一个区间左闭右开!!!#include <iostream>#include <vector>#include <algorithm>#include <cstring>using namespace std;#define lson l,mid,rt<<...原创 2019-03-21 12:18:09 · 152 阅读 · 0 评论 -
ACM-ICPC 2018 徐州赛区网络预赛 Trace
思路将宽度从大到小排序,对于每一个宽度都有一个对应的高度,我们用线段的叶子节点表示为时间,并且维护这段时间的最大高度,每次我们遍历一个宽度,我们从线段树中查询从这个时间之后的这段时间里的最大高度,因为宽度是从大到小排序的,这个时候宽度是比前面的宽度小的我们找出这个时间之后的最大长度进行相减就可以了。注意单点更新的时候是用else!!!!复杂度nlogn#include <i...原创 2019-04-16 20:25:04 · 146 阅读 · 0 评论