数据结构-线段树
Maxwei_wzj
AFO
展开
-
【UOJ#388】配对树(UNR#3)-线段树合并
测试地址:配对树 做法:本题需要用到线段树合并。 这题是NOI2018中间Mychael大佬给的一道神题,现在他已AFO,我也从蒟蒻变成了一个没那么弱的蒟蒻,于是在写这一题的同时,怀念一下和Mychael大佬一起度过的OI时光(虽然只是网上交流2333)。 首先,如果一个区间内点出现了多次,肯定是先自己结合掉2k2k2k次是最优的。那么剩下的一个点集,对于树上的一棵子树,有这样的结论:对于子...原创 2018-08-30 23:47:36 · 330 阅读 · 0 评论 -
【BZOJ4912】天才黑客(SDOI2017)-最短路+虚树+线段树优化建图
测试地址:天才黑客 做法:本题需要用到最短路+虚树+线段树优化建图。 本人好像使用了本题最经典,但是也最难写,时间复杂度最高,也很丑的做法。但是作为本人接触线段树优化建图这种方法的第一道题,本人还是十分坚强地写出了本人OI生涯中最长的一份代码(长达6.2KB)。 首先简化题意,题目给出一张有向图,每条边上有一个字符串,是一棵给定的trie中能匹配的一个串,一条路径的代价是:每条边的边权之和,...原创 2018-09-04 22:06:05 · 396 阅读 · 0 评论 -
【BZOJ4137】火星商店问题(FJOI2015)-线段树分治+可持久化trie
测试地址:火星商店问题 题目大意:有nnn个商店,每个商店都有一个特殊商品,每个人在任何时间都可以买。第一天可能没有进货,有若干次询问,而之后的每天,都有一次进货和若干次询问,每次进货都是某个商店进了某个编号的货,每次询问都是询问在编号为lll到rrr的商店中,在ddd天内进的货的编号异或xxx的最大值。 做法:本题需要用到线段树分治+可持久化trie。 对于特殊商品,直接用可持久化trie...原创 2018-09-11 16:30:06 · 402 阅读 · 0 评论 -
【BZOJ1835】基站选址(ZJOI2010)-DP+线段树优化
测试地址:基站选址 题目大意:有n(≤20000)n(≤20000)n(\le 20000)个村庄,第iii个村庄坐标为didid_i。现在要在村庄中建造不超过k(≤100)k(≤100)k(\le 100)个基站,在村庄iii建造基站的费用是cicic_i,并且如果没有在村庄iii周围sisis_i距离的范围内建造基站的话,就要支付WiWiW_i的补偿费。求最小花费。 做法:本题需要用到DP...原创 2018-09-10 09:34:57 · 349 阅读 · 0 评论 -
【HDU4117】GRE Words-AC自动机+线段树优化DP
测试地址:GRE Words 题目大意:给定一个字符串序列,每个字符串有一个权值。求一个子序列(可以为空),使得序列中前一项总是后一项的子串,并且字符串的权值和最大。 做法:本题需要用到AC自动机+线段树优化DP。 很容易看出一个DP,但我们不能暴力找到可以转移的点,因此我们需要观察能转移到字符串sisis_i的点的性质。 首先对这些串建出AC自动机,我们发现,可以转移到字符串sisis_...原创 2018-09-10 21:45:39 · 292 阅读 · 0 评论 -
【BZOJ4293】Siano(PA2015)-线段树+二分
测试地址:Siano题目大意: 有nnn片草,第iii片草每天长高aia_iai米,mmm次操作,每次操作在第ddd天把所有草高于某个数bbb的部分割掉,求每次割下的草的高度和。做法: 本题需要用到线段树+二分。挺神的一道题…注意到每次割草,被割的草都不一定是一个区间,很难处理,因此想到通过某种办法把每次操作的修改变成一个区间。观察发现,在任何时刻,aia_iai大的草的高度一定不会比...原创 2018-09-28 19:58:28 · 343 阅读 · 0 评论 -
【BZOJ1146】网络管理(CTSC2008)-树状数组+主席树
测试地址:网络管理做法: 本题需要用到树状数组+主席树。经典的带修改树上路径第kkk大问题,不过我太菜了居然忘了有树上主席树这个东西…不带修改的话能用树上主席树做,那么带修改怎么办呢?因为一次修改会影响一棵子树上的所有线段树,所以我们还是把树拍成DFS序,就变成区间修改了。注意到查询的时候只是查单棵线段树,因此可以运用差分的方法,把上述操作变成单点修改,前缀和求和,这个就用树状数组套主席树(...原创 2018-10-16 10:30:47 · 189 阅读 · 0 评论 -
【LuoguP4927】梦美的线段树(LGR-053)-线段树
测试地址:梦美的线段树做法: 本题需要用到线段树。经过简单的计算,题目所求的是:ans=∑sumi2sum1ans=\frac{\sum sum_i^2}{sum_1}ans=sum1∑sumi2于是我们现在要求的就是∑sumi2\sum sum_i^2∑sumi2。向上合并非常简单,主要难的是,当一棵子树内每个叶子节点都增加xxx时,新的平方和如何计算。令sonison_is...原创 2018-10-17 16:30:40 · 233 阅读 · 0 评论 -
【51Nod1766】树上的最远点对-线段树+树的直径
测试地址:树上的最远点对 做法:本题需要用到线段树+树的直径。 我们直觉上感觉这题的区间询问需要用到线段树,那么我们就要发掘出问题中隐藏的可合并的性质。而看见最远点对又会想到树的直径,那么树的直径这个信息是不是可以快速合并的呢?怎么合并呢?下面我们就夯实理论基础,这样我们就能很简单地解决这一题了。 首先有一个结论:树上任意一个点在树中的最远点是树的直径的某个端点。我们可以用反证法轻易地证明这...原创 2018-08-06 10:58:41 · 550 阅读 · 0 评论 -
【BZOJ1396】识别子串-后缀自动机+线段树
测试地址:识别子串 做法:本题需要用到后缀自动机+线段树。 很快能有一个想法,就是用后缀自动机求出所有识别子串,然后在线段树上区间更新。可是识别子串的数目可能很多,直接更新会挂,这是不是就意味着不能做呢?别急,先来考虑识别子串这个性质会不会使它的分布更加特殊。 很快我们便观察到了一个事实,包含一个识别子串的所有子串都是识别子串。我们知道子串的集合就等同于所有前缀的所有后缀的集合,根据上面的性...原创 2018-08-09 12:12:12 · 284 阅读 · 0 评论 -
【BZOJ3533】向量集(SDOI2014)-线段树+凸壳+二分
测试地址:向量集 做法:本题需要用到线段树+凸包+二分。 令询问的向量为(a,b)(a,b)(a,b),序列中第iii个向量为(xi,yi)(xi,yi)(x_i,y_i),那么要求l≤i≤rl≤i≤rl\le i\le r时,axi+byiaxi+byiax_i+by_i的最大值,令这个式子为kkk,则有: yi=−abxi+kbyi=−abxi+kby_i=-\frac{a}{b}x_i...原创 2018-05-20 12:28:16 · 395 阅读 · 0 评论 -
【BZOJ4826】影魔(AHOI&HNOI2017)-线段树+离线
测试地址:影魔 做法:本题需要用到线段树+离线。 首先你需要注意到,题目中所给的序列是一个全排列(没看到这个条件的我直接跪了)。然后我们转化题目中的限制条件,我们发现这个条件等价于:当ki,kjki,kjk_i,k_j分别为[i,j][i,j][i,j]的最大和次大值时,有p1p1p_1的贡献;当ki,kjki,kjk_i,k_j中有一个是[i,j][i,j][i,j]的最大值,而另一个不是次...原创 2018-05-15 10:27:12 · 339 阅读 · 0 评论 -
【BZOJ4785】树状数组(ZJOI2017)-概率+二维线段树+动态开点
测试地址:树状数组 做法:本题需要用到概率期望+二维线段树+动态开点。 首先分析题目,对树状数组结构熟悉的同学(不熟悉的话…画一画或者打个表也行)就能看出,题目中的数据结构求的是后缀和。那么当我们询问[l,r][l,r][l,r]时,我们原来是算[1,l−1]xor[1,r]=[l,r][1,l−1]xor[1,r]=[l,r][1,l-1]xor[1,r]=[l,r],现在变成算[l−1,n...原创 2018-05-16 11:28:19 · 580 阅读 · 0 评论 -
【BZOJ1558】等差数列(JSOI2009)-差分+线段树
测试地址:等差数列 做法:本题需要用到差分+线段树。 我们发现等差数列这个东西非常难维护,于是我们将序列和修改全部差分,我们发现一个有趣的性质:等差数列的差分中各个数相等(其实是句废话)。最关键的是,我们把玄乎的修改操作变成了用三个区间加操作就能完成:从s−1s−1s-1到sss的差分增加了aaa,从iii到i+1(s≤i<t)i+1(s≤i<t)i+1(s\le ibbb,从tt...原创 2018-05-23 10:30:29 · 519 阅读 · 0 评论 -
【BZOJ4105】平方运算(THUSC2015)-线段树+找规律
测试地址:平方运算 题目大意: 做法:本题需要用到线段树+找规律。 看到这种特别诡异的区间操作,不能直接用线段树维护,那肯定又要分析操作的性质了。注意到因为有一个模数ppp,所以平方很多次之后一定会进入一个循环,根据打表发现数据中所有的ppp都满足两个性质: 1.所有数操作至多不超过111111步就会进入一个循环。 2.所有循环的循环节长度的LCM不超过606060。 于是对于操作区间...原创 2018-05-23 19:22:35 · 437 阅读 · 0 评论 -
【LOJ2537】Minimax(PKUWC2018)-树形DP+线段树合并
测试地址:Minimax 做法:本题需要用到树形DP+线段树合并。 很快想到一种定义状态的方式:f(i,j)f(i,j)f(i,j)表示点iii的权值为jjj(离散化后)的概率,然后转移时,因为这是棵二叉树,令sonsonson为当前枚举的儿子,sum(j)sum(j)sum(j)为另一个儿子中权值小于jjj的概率,我们有以下状态转移方程: f(i,j)=∑son∑nj=1f(son,j)[...原创 2018-06-21 09:37:47 · 351 阅读 · 0 评论 -
【LOJ2585】新家(APIO2018)-线段树+multiset
测试地址:新家 做法:本题需要用到线段树+multiset。 这题题意有点复杂,先理一下:数轴上有一些带颜色的点,每个点会在某个特定的时间段出现,若干个询问,每次询问某个时刻上离一个坐标距离最远的颜色的距离。坐标和颜色的距离定义为,该坐标与当前出现的所有该颜色的点的最小距离。 理完了题意,就可以想题了。首先因为没有强制在线,所以显然将操作按时间排序,而且把某个时间段出现某个点变成两个操作:某...原创 2018-06-25 20:12:03 · 321 阅读 · 0 评论 -
【CF487E】Tourists-圆方树+multiset+树链剖分
测试地址:Tourists 题目大意:一个nnn个点mmm条边的无向连通图,每个点有点权,要求维护单点修改,还有若干次询问,每次询问两个点之间的简单路径上的点权最小值最小是多少。 做法:本题需要用到圆方树+multiset+树链剖分。 做过APIO2018-铁人两项的同学应该很快能看出来,我们实际上就是要找一个中间点,使得这个中间点的点权最小,而能作为中间点的点我们在上面那题讨论过了:路径所...原创 2018-06-19 20:27:46 · 315 阅读 · 0 评论 -
【LuoguP3616】富金森林公园-线段树
测试地址:富金森林公园做法: 本题需要用到线段树。一道好题,不看题解乍一下真的不知道怎么做…我们考虑直接维护水面在高度iii时能看见的连续段数cnt(i)cnt(i)cnt(i),考虑一块石头高度的增减对cntcntcnt的影响。为了讨论方便,我们把修改操作都看成是,先把石头高度降到最低,再把石头高度升到新的高度,这样只用考虑两个过程就可以了,并且我们发现这两个过程产生的贡献完全相反,因此我...原创 2018-10-23 21:32:57 · 277 阅读 · 0 评论 -
【LuoguP4719】动态DP模板-树链剖分+线段树+矩阵乘法
测试地址:动态DP做法: 本题需要用到树链剖分+线段树+矩阵乘法维护动态DP。动态DP这个东西以前听过,但当时没有看懂,现在想来觉得是卡在矩阵乘法这个地方。这里用的不是传统的矩阵乘法。一般的DP我们肯定会做,序列上的线性动态DP(可以用线性递推式递推的DP)很容易想到用线段树+矩阵乘法优化,但最大权值独立集这个经典树形DP模型要动态维护的话,有两个和上面问题不同的地方,第一是它不是序列,第二...原创 2020-01-22 12:13:20 · 257 阅读 · 0 评论 -
【BZOJ4869】相逢是问候(六省联考2017)-扩展欧拉定理+线段树
测试地址:相逢是问候 做法:本题需要用到扩展欧拉定理+线段树。 我们知道在gcd(c,p)=1gcd(c,p)=1\gcd(c,p)=1时,有欧拉定理: cx≡cx%φ(p)(modp)cx≡cx%φ(p)(modp)c^x\equiv c^{x\%\varphi(p)}(\mod p) 然而本题中c,pc,pc,p并不一定互质,那么我们有扩展欧拉定理: 当x≥φ(p)x≥φ(p)x\g...原创 2018-05-18 19:23:05 · 367 阅读 · 0 评论 -
【BZOJ4942】整数(NOI2017)-线段树+压位
测试地址:整数 做法:本题需要用到线段树+压位。 首先考虑在某一位加111或减111的情况。在加111时,我们要从当前位开始,找到最低的为000的位,然后把这一位加111,路上经过的所有位都清零。在减111时,我们要从当前位开始,找到最低的为111的位,然后把这一位减111,路上经过的所有位都修改成111。这些操作显然可以在线段树上完成。 但是我们发现,操作的数位的范围可能特别大,达到3×1...原创 2018-05-17 08:06:02 · 275 阅读 · 0 评论 -
【POJ2777】Count Color-线段树区间更新
【POJ2777】Count Color-线段树区间更新原创 2016-07-21 13:19:12 · 345 阅读 · 0 评论 -
【BZOJ2243】染色-树链剖分+线段树复杂操作
【BZOJ2243】染色-树链剖分+线段树复杂操作原创 2016-08-06 19:42:22 · 315 阅读 · 0 评论 -
【POJ3468】A Simple Problem with Integers-线段树和伸展树入门题
【POJ3468】A Simple Problem with Integers-线段树和伸展树入门题原创 2016-07-23 18:09:00 · 342 阅读 · 0 评论 -
【NOI2015T2】软件包管理器-树链剖分维护路径和子树信息
【NOI2015T2】软件包管理器-树链剖分维护路径和子树信息原创 2017-04-08 11:43:35 · 395 阅读 · 0 评论 -
【NOI2007T4】项链工厂-线段树+坐标变换
【NOI2007T4】项链工厂-线段树+坐标变换原创 2017-03-13 19:52:47 · 393 阅读 · 0 评论 -
【POJ2104】K-th Number-主席树(可持久化线段树)+离散化
【POJ2104】K-th Number-主席树(可持久化线段树)+离散化原创 2017-03-14 18:43:29 · 400 阅读 · 0 评论 -
【HDU4348】To The Moon-主席树(可持久化线段树)区间修改+区间询问
【HDU4348】To The Moon-主席树(可持久化线段树)区间修改+区间询问原创 2017-03-15 11:28:33 · 676 阅读 · 0 评论 -
【ZOJ2112】Dynamic Rankings-树状数组套主席树+离散化
【ZOJ2112】Dynamic Rankings-树状数组套主席树+离散化原创 2017-03-15 18:46:13 · 589 阅读 · 0 评论 -
【HDU1823】Luck and Love-二维线段树
【HDU1823】Luck and Love-二维线段树原创 2016-07-20 19:22:28 · 425 阅读 · 0 评论 -
【POJ1436】Horizontally Visible Segments-线段树区间更新
【POJ1436】Horizontally Visible Segments-线段树区间更新原创 2016-07-19 12:51:56 · 425 阅读 · 0 评论 -
【POJ2528】Mayor's Posters-线段树+离散化
【POJ2528】Mayor's Posters-线段树+离散化原创 2016-07-23 18:22:53 · 281 阅读 · 0 评论 -
【Ural1028】Stars-线段树和树状数组入门题
【Ural1028】Stars-线段树和树状数组入门题原创 2016-07-26 19:50:39 · 346 阅读 · 0 评论 -
【HDU1166】敌兵布阵-单点修改和区间求和
【HDU1166】敌兵布阵-单点修改和区间求和原创 2016-07-26 20:02:31 · 280 阅读 · 0 评论 -
【POJ3067】Japan-区间求和
【POJ3067】Japan-区间求和原创 2016-07-26 20:09:23 · 797 阅读 · 0 评论 -
【POJ2299】Ultra-Quicksort-逆序对
【POJ2299】Ultra-Quicksort-逆序对原创 2016-07-27 22:13:23 · 343 阅读 · 0 评论 -
【HOJ2275】Number Sequence-组合
【HOJ2275】Number Sequence-组合原创 2016-07-27 22:20:57 · 359 阅读 · 0 评论 -
【HOJ1867】经理的烦恼-区间求和+判素数
【HOJ1867】经理的烦恼-区间求和+判素数原创 2016-07-27 22:28:07 · 290 阅读 · 0 评论 -
【HOJ2430】Counting the Algorithms-区间维护
【HOJ2430】Counting the Algorithms-区间维护原创 2016-07-29 00:03:30 · 356 阅读 · 0 评论