
线段树
varinic
这个作者很懒,什么都没留下…
展开
-
hdu 5726 GCD 2016多校赛第一场
枚举[L,R] 区间的gcd时朴素时间要n^2,这里可以巧妙地枚举右端点a[i] 所有以a[i] 为结尾的区间的gcd为以a[i -1 ] 为结尾的区间gcd与a[i]本身求GCD的结果。根据这一特性可以用map存下以a[i -1 ] 为结尾的区间gcd的结果,然后将结果转移到a[i]就可以了。至于查询则可用线段树在logn时间里求解。#include#include#include#i原创 2016-07-20 15:10:52 · 881 阅读 · 0 评论 -
poj 3667 Hotel 线段树区间合并
至此,扫描线,线段树区间修改更新,可持久化线段树,线段树区间合并 等线段树题目全部过了一遍。接下来还有好多高级数据结构等着我去学。trick:线段树区间合并时,cover只需一个,因为一段区间只能处于一种状态,我作死开了两个cover分别对应两种情况,好处是一目了然,坏处是更新完一个cover还要更新另一个,(因为一段区间只能处于一种状态) QAQ #include原创 2016-09-02 13:40:15 · 456 阅读 · 0 评论 -
hdu 5861 Road 线段树区间更新
考虑每一段最早出现的时间和最晚消失的时间,在这之间这段路都是要打开的,然后将2*n个时间点放到m个查询,对每个查询,可知道当前查询有哪些点进入,哪些点出去,统计它们对答案的贡献。#include #include #include #include #include #include #include using namespace std;typedef long l原创 2016-08-24 09:30:38 · 546 阅读 · 0 评论 -
hdu 4027 Can you answer these queries? 线段树区间修改区间查询
题目大意:对线段树有两种操作,对连续一段整体开根号,对连续一段整体求和。分析:这里开根号数会越来越小,到1后根号1==1,不变,可以利用这一点。某段maxv还有一种优化就是某一段maxv==minv,既这一段全都相等,那么开根号后值一样,可以用lazy优化。我第一种,两种结合起来试了一下,第二次跑的比第一次还慢,不知道是数据原因还是我代码写挫了。。附代码:#includ原创 2016-08-25 10:08:24 · 426 阅读 · 0 评论 -
poj 2777 Count Color 线段树区间更新
题目大意:给你两种操作:1、给一段连续区间涂颜色。2、统计某一区间有多少种不同的颜色。分析:线段树区间更新,区间查询。略坑的一点是要用二进制优化,开始用的vector TLE到死。。。#include #include #include #include #include #include #include #include #define lson k<<原创 2016-08-25 16:43:49 · 497 阅读 · 0 评论 -
hihoCoder - 1116 - 计算 (线段树区间合并)
线段树区间合并的题目套路就是每一段维护1.当前段的答案data[k],2.当前段所有前缀Left[k]3.当前段所有后缀Right[k]合并时由当前段的左右子节点的data转移当前段,还有左子节点的后缀与右子节点的前缀合并形成的区间对当前段的贡献。然后维护当前段Left,Right就ok了。现在很少看见用vect或者map维护每一段前后缀的了(我会说是跑的太慢了吗)原创 2016-09-25 15:32:31 · 678 阅读 · 0 评论