线段树
文章平均质量分 78
zxxxxzzz
这个作者很懒,什么都没留下…
展开
-
hdu 1166 敌兵布阵 单点更新模板
#include #include #include #include using namespace std; #define lson l, mid, rt << 1 #define rson mid+1, r, rt << 1 | 1 const int N = 50005; struct node{ int l, r; int x; }tr[N*4]; int n;原创 2015-02-03 20:24:40 · 382 阅读 · 0 评论 -
hdu 5493 Queue 线段树
题意:n个人排队,给出每个人的身高和,每个人只记得在他前面或后面比他高的人的数量,求一组字典序最小的排队方式。 首先将所有人按照身高从小到大排序,假设数组前面的人都已经合理的排好,那么对于当前的人来说,他的要求就是在他的前面或者后面能够有足够的空间安排比他高的人。于是设线段树当前节点记录该节点的子区间里面还有多少空余的空位,每次查询的时候去找到 当前的人前面(后面)比他高的人的数量 +1原创 2015-09-27 21:02:05 · 1017 阅读 · 0 评论 -
hdu 1394 Minimum Inversion Number 线段树
题意:求a1, a2, ..., an-1, an (where m = 0 - the initial seqence) a2, a3, ..., an, a1 (where m = 1) a3, a4, ..., an, a1, a2 (where m = 2) ...原创 2015-09-10 21:03:53 · 319 阅读 · 0 评论 -
hdu 5371 Hotaru's problem manacher + 线段树
题意:找出一段最长的子串分成三部分abc,其中ab为回文串,ac相等(可得bc也是回文串) 这里将分割abc的两个点分别看成第一分割点x和第二分割点y,那么用manacher求出每个点为中心的最长分割点之后,对于第一ab这个回文串,可以知道的是它的长度为偶数,第一分割点为其中间的那个位置,再来看第二分割点的位置,由manecher的性质知道,假如有这么一段子串(abcd随便表示数字,并不一定相同原创 2015-08-12 15:11:00 · 586 阅读 · 2 评论 -
hdu 3966 Aragorn's Story树剖成段更新单点查询模板
题意:一棵树上要么修改一条路径的值,要么查询某点的值 果树剖+线段树。 小总结:树剖是重建树链之后,依靠数据结构(seg | bit)更新的,那么对于要操作的步骤(查询或者是修改),就是在数据结构里面完成的,即 在update_path(query_path)里面进行线段树或者树状树枝等数据结构的更新操作。---------------------------》对于分不清到底要更新原来树上的点原创 2015-03-23 23:40:44 · 396 阅读 · 0 评论 -
bzoj 1036 [ZJOI2008]树的统计Count 树链剖分点权果题
#include #include #include #include #include #include #include #include #include #include #include using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1 | 1 #原创 2015-03-22 11:08:25 · 396 阅读 · 0 评论 -
hdu 4614 Vases and Flowers 线段树
题意:n个点m次操作,1:从st处开始向右找出最多的0,使0变1 。2:使连续一段区间的1都变0 主要是区间更新及区间查询,更新就是找出区间记录下来的x就行了,查询的时候由于查找的区间是不连续的,因此需要根据区间内1的数量,确定更新的起点和终点,然后普通的成端更新就可以了 #include #include #include #include #include #include #原创 2015-03-11 23:25:29 · 339 阅读 · 0 评论 -
hdu 4267 A Simple Problem with Integers 线段树维护不连续点
题意:给出n个数两种操作, 1,查询第i个数是什么,2,输入a, b, k, c,然后所有满足在区间[a, b]里面的下标i 满足(i - a)% k == 0的全部加上c。 首先可以将每隔k的数看成一堆(如 x , x + k...),对于每堆都可以由线段树维护。那么,需要开多少颗线段树呢,可以这么看,k最大为10,那么 %k = (0, 1, 2, ....k-1 = 9)共有十堆,也可以当原创 2015-02-27 01:15:21 · 344 阅读 · 0 评论 -
hdu 3974 Assign the task 线段树(时间戳)
第一次听见这东西。真神奇。 题意:给出一颗n个节点的有向树,根为boss。然后m个操作,T a b表示把a及其管理的员工的工作换成b,C a则为查询a 的工作是什么。 思路:可以先从树根dfs并为节点按照访问顺序编号,那么可以得到每个点能控制的员工访问(包括自身和控制的员工),相当于线段树里面某节点的覆盖区间。其他的按照线段树的正常操作即可 #include #include #incl原创 2015-02-24 23:15:31 · 373 阅读 · 0 评论 -
hdu 3911 Black And White 线段树区间合并
题意就是开始给出n个黑白棋子,然后1.翻转连续的一段,即黑白颜色互换,2.查询连续一段区间里面连续的黑色棋子的最长长度。 hdu 1540是单点更新区间查询,这道是成段更新区间查询,两道的大致思路没什么区别,就是当前节点的maxlen为,当前节点控制范围里左最长连续和右最长连续,或者包括mid在内的一段连续(这里的连续指黑棋的连续区间)。但是不同的是这里还要记录白棋的信息,因为翻转的时候,正好翻原创 2015-02-21 00:14:50 · 458 阅读 · 0 评论 -
hdu 4027 Can you answer these queries? 线段树
就是两种操作:1.将选定区间的每个数变成原来的floor(sqrt(x))2.求选定区间的数的总和 开始还想着是不是能够成段更新,将要开根的区间先存着。想想这么写有点太麻烦了因为最后还是要更新到叶子节点才能算答案的。因此直接改成单点更新就好,但是有个重要的剪枝,就是1 == sqrt(1),即一段连续区间的长度 == 该长度总和,也就是该长度内每个点都是1的时候就没必要继续更新下去了。 #in原创 2015-02-09 16:26:33 · 383 阅读 · 0 评论 -
hdu 1540 & poj 2892 Tunnel Warfare 线段树区间合并
基础线段树区间合并,详见代码 #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1,原创 2015-02-18 01:31:59 · 431 阅读 · 0 评论 -
zoj 1610 Count the Colors 线段树
本地跑不起来交上去能过.. #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r原创 2015-02-08 22:45:24 · 440 阅读 · 0 评论 -
hdu 1698 Just a Hook 线段树
#include #include #include #include #include #include #include #include #include #include #include using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1 | 1 #原创 2015-02-07 22:17:15 · 361 阅读 · 0 评论 -
poj 2528 Mayor's posters 简单离散化+线段树
简单离散化+线段树 #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r, rt原创 2015-02-07 20:13:03 · 359 阅读 · 0 评论 -
poj 3264 Balanced Lineup简单线段树
加了挂立减1s= = #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r, r原创 2015-02-08 23:39:47 · 382 阅读 · 0 评论 -
poj 3468 A Simple Problem with Integers 线段树成段更新模板
#include #include #include #include #include #include #include #include #include #include #include using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1 | 1 #原创 2015-02-07 20:43:29 · 440 阅读 · 0 评论 -
poj 2828 Buy Tickets 线段树单点更新
题意:有N个人排队,每一个人都有一个val来对应,每一个后来人都会插入当前队伍的某一个位置pos。要求把队伍最后的状态输出 //#include #include #include #include #include #include #include #include #include #include #include ///cout << fixed << setpr原创 2015-09-17 21:26:46 · 362 阅读 · 0 评论