线段树
_Ark
这个作者很懒,什么都没留下…
展开
-
LOJ #2001. 「SDOI2017」树点涂色 (LCT + 线段树)
题面LOJ 2001题解转自luyixian的博客操作一我们发现这一个操作就是把树中某个节点到根节点的路径上的所有节点变成一样的颜色,又因为这棵树上有一个性质,同样颜色的点连接起来一定会是一条链,就可以想到LCT的access函数。所以我们将同种颜色的点看成LCT中同一棵splay上的点。操作二因为LCT已经维护了颜色了,所以我们不能再用LCT来维护路径之间的权值了。于是就可以想到...原创 2020-04-29 16:32:52 · 190 阅读 · 0 评论 -
bzoj 3331: [BeiJing2013]压力 (点双 圆方树 树链剖分 线段树)
题面如今,路由器和交换机构建起了互联网的骨架。处在互联网的骨干位置的核心路由器典型的要处理100Gbit/s的网络流量。他们每天都生活在巨大的压力之下。小强建立了一个模型。这世界上有N个网络设备,他们之间有M个双向的链接。这个世界是连通的。在一段时间里,有Q个数据包要从一个网络设备发送到另一个网络设备。一个网络设备承受的压力有多大呢?很显然,这取决于Q个数据包各自走的路径。不过,某...原创 2020-01-12 15:22:11 · 307 阅读 · 0 评论 -
NOI模拟赛 T3 计算 calculating (线段树优化DP)
先存下代码CODE#include <bits/stdc++.h>using namespace std;const int MAXN = 500005;const int mod = 1000000009;inline void read(int &x) { int flg = 1; char ch; while(!isdigit(ch=getchar())) ...原创 2020-01-02 22:55:24 · 192 阅读 · 0 评论 -
Luogu P4198 楼房重建 (李超线段树)
题目传送门题解首先转化成到(0,0)(0,0)(0,0)的斜率。那么就是求多少个点是前缀最大值。做法是线段树,用gao(i,x)gao(i,x)gao(i,x)表示在iii区间内,之前最大值为xxx的答案。然后发现gao(p→r,p→l→max)gao(p\to r,p\to l\to max)gao(p→r,p→l→max)就是gao(p,0)−gao(p→l,0)gao(p,0)-...原创 2019-10-25 20:38:40 · 190 阅读 · 0 评论 -
[BZOJ 1095] [ZJOI2007]Hide 捉迷藏——线段树+括号序列(强..)
神做法…%dalao,写的超详细 konjac的博客.如果觉得上面链接的代买不够优秀好看,欢迎回来看本蒟蒻代码…CODE WITH ANNOTATION代码中−6-6−6表示左括号’[’,用−9-9−9表示右括号’]’.emmmm…#include<bits/stdc++.h>using namespace std;char cb[1<<15],*cs=cb,...原创 2019-03-27 22:46:56 · 264 阅读 · 0 评论 -
BZOJ 1758 / Luogu P4292 [WC2010]重建计划 (分数规划(二分/迭代) + 长链剖分/点分治)
题意自己看.分析求这个平均值的最大值就是分数规划,二分一下就变成了求一条长度在[L,R]内路径的权值和最大.首先这是一棵树,显然点分治是可写的然鹅我并不是很想(会)写点分治因此这里有另一种方法先对树长链剖分,我们像做dsu on tree一样先做长链,用线段树继承长链的全部信息,然后做其他儿子查询的时候枚举一下路径的长度len,左半边单点O(1)O(1)O(1)查询长度为len的最大...原创 2019-03-28 10:51:31 · 208 阅读 · 0 评论 -
BZOJ 3173: [Tjoi2013]最长上升子序列 (线段树+BIT)
先用线段树预处理出每个数最终的位置.然后用BIT维护最长上升子序列就行了.用线段树O(nlogn)O(nlogn)O(nlogn)预处理就直接倒着做,每次删去对应位置的数.具体看代码CODE#include<bits/stdc++.h>using namespace std;char cb[1<<15],*cs=cb,*ct=cb;#define getc() ...原创 2019-03-29 08:06:03 · 355 阅读 · 0 评论 -
BZOJ 5496: [2019省队联测]字符串问题 (后缀数组+主席树优化建图+拓扑排序)
题意略分析考场上写了暴力建图40分溜了…(结果只得了30分)然后只要优化建边就行了首先给出的支配关系无法优化,就直接A向它支配的B连边.考虑B向以B作为前缀的所有A连边,做一遍后缀数组,两个区间的左端点位置的LCP一定大于等于B的长度.在排好序的后缀数组上就是一段区间.然后用线段树优化建边.那么用ST表倍增算一下能拓展的区间就行了.然后由于只能向长度大于自己的连边,就按长度排序然后...原创 2019-04-13 17:17:27 · 258 阅读 · 0 评论 -
Codeforces Round #539 (Div. 1) C. Sasha and a Patient Friend 动态开点线段树
题解看这里 liouzhou_101的博客园更简洁的代码看这里:#include <bits/stdc++.h>using namespace std;typedef long long LL;#define X first#define Y secondinline void read(int &x) { int flag = 1; char ch; ...原创 2019-05-18 10:22:31 · 186 阅读 · 0 评论 -
Codeforces Round #539 (Div. 1) E - Sasha and a Very Easy Test 线段树
如果mod是质数就好做了,但是做除法的时候对于合数mod可能没有逆元。所以就只有存一下mod的每个质因数(最多9个)的幂,和剩下一坨与mod互质的一部分。然后就能做了。有点恶心。CODE#include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN = 100005;const ...原创 2019-05-18 10:42:01 · 176 阅读 · 0 评论 -
BZOJ3083 遥远的国度 (树链剖分 换根子树求min)
题意传送门题解除去树剖模板,问题就是换根。写LCT?要维护子树信息比较麻烦。树剖仍然可以做。我们还是按111为根树剖。对于询问分一下类,假设当前点为uuu,根为rtrtrt:u=rtu=rtu=rt,直接询问整棵树。rtrtrt不在uuu子树内,则uuu在以rtrtrt为根时的子树和以111为根时的子树相同,直接查询子树。rtrtrt在uuu子树内,那么一定可以找到uuu的儿子v...原创 2019-09-12 15:58:59 · 141 阅读 · 0 评论 -
BZOJ 3038: 上帝造题的七分钟2 / BZOJ 3211: 花神游历各国 (线段树区间开平方)
题意给出一些数,有两种操作。(1)将区间内每一个数开方(2)查询每一段区间的和分析普通的线段树保留修改+开方优化。可以知道当一个数为0或1时,无论开方几次,答案仍然相同。所以设置flag=1变表示这一段区间全是0/1,那么修改的时候直接暴力遍历线段树结点。因为一个数被开方到1,只会被开方很少的次数,所以说能过.CODE1上帝造题的七分钟2#include <cctype>...原创 2019-03-23 15:30:37 · 167 阅读 · 0 评论 -
BZOJ 3551/3545: [ONTAK2010]Peaks加强版 (Kruskal树+dfs序上的主席树+倍增)
Orz PoPoQQQ学到了维护子树信息的时候用dfsdfsdfs序套主席树节省线段树空间.学到了怎么用指针写可持久化线段树…emmm…CODE只贴上3551的代码#include <queue>#include <cctype>#include <cstdio>#include <cstring>#include <al...原创 2019-03-23 15:00:19 · 275 阅读 · 0 评论 -
BZOJ 3672[NOI2014]购票(树链剖分+线段树维护凸包+斜率优化) + BZOJ 2402 陶陶的难题II (树链剖分+线段树维护凸包+分数规划+斜率优化)
前言刚开始看着两道题感觉头皮发麻,后来看看题解,发现挺好理解,只是代码有点长。BZOJ 3672[NOI2014]购票中文题面,题意略: BZOJ 3672[NOI2014]购票设f(i)f(i)f(i)表示iii点所花的最小费用,可以写出方程式f(i)=min{&amp;amp;nbsp;f(j)+pi(disi−disj)+qi&amp;amp;nbsp;}f(i)=min\{\ f(j)+p_i(dis_i-d...原创 2019-03-07 21:02:43 · 562 阅读 · 0 评论 -
BZOJ 3065 带插入区间K小值 (替罪羊树套线段树)
毒瘤题.参考抄自博客:hzwer第一次写替罪原创 2019-03-20 21:14:38 · 171 阅读 · 0 评论 -
BZOJ 4127: Abs (树链剖分 线段树求区间绝对值之和 带区间加法)
题意给定一棵树,设计数据结构支持以下操作1 u v d 表示将路径 (u,v) 加d(d>=0)2 u v 表示询问路径 (u,v) 上点权绝对值的和分析绝对值之和不好处理,那么我们开两棵线段树,一个存正数,一个存负数.然后对于两棵线段树,都要维护子树sz(有效节点数),sum(有效节点权值之和),lz(加法懒标记).特别的,因为负数可能会加到正数,那么修改一个区间的时候,询...原创 2019-03-25 08:46:25 · 685 阅读 · 0 评论 -
BZOJ 2157: 旅游 (树链剖分+线段树)
树链剖分后线段树维护区间最大最小值与和. 支持单点修改与区间取反.直接写个区间取反标记就行了.线段树板题.(1A警告)#include <cstdio>#include <cctype>#include <cstring>#include <algorithm>using namespace std;typedef long long ...原创 2019-03-25 10:08:34 · 216 阅读 · 0 评论 -
BZOJ 2836: 魔法树 (树链剖分+线段树)
板题…记得开longlong#include <cstdio>#include <cctype>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;inline void read(int &num) { char ch;...原创 2019-03-25 10:49:52 · 138 阅读 · 0 评论 -
BZOJ 3531: [Sdoi2014]旅行 (树剖+动态开点线段树)
对于每种信仰维护一棵动态开点线段树就行了…#include <cstdio>#include <cctype>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;inline void read(int &num) { c...原创 2019-03-25 11:36:31 · 134 阅读 · 0 评论 -
uoj30【CF Round #278】Tourists(圆方树+树链剖分+可删除堆)
…学习了一波圆方树学习了一波点分治学习了一波可删除堆(巧用 ? STL)传送门: Icefox_zhx注意看代码看怎么构建圆方树的.tips:tips:tips:圆方树内存记得开两倍CODE#include <vector>#include <queue>#include <cstdio>#include <cctype>...原创 2019-03-25 17:28:12 · 256 阅读 · 0 评论 -
BZOJ 1984: 月下“毛景树” (树链剖分+线段树)
注意赋值和加法的标记下传优先级.具体看代码.CODE#include <vector>#include <queue>#include <cstdio>#include <cctype>#include <cstring>#include <algorithm>using namespace std;type...原创 2019-03-25 19:34:52 · 197 阅读 · 0 评论 -
BZOJ 2243: [SDOI2011]染色 (树剖+线段树)
树链剖分后两个区间合并的时候就判一下相交颜色是否相同来算颜色段数就行了.CODE#include <vector>#include <queue>#include <cstdio>#include <cctype>#include <cstring>#include <algorithm>using names...原创 2019-03-25 20:37:53 · 159 阅读 · 0 评论 -
BZOJ 3626 [LNOI2014]LCA 树剖+(离线+线段树 // 在线+主席树)
BZOJ 4012 [HNOI2015]开店 的弱化版,离线了,而且没有边权(长度).两种做法1 树剖+离线+线段树这道题求的是一个点zzz与[l,r][l,r][l,r]内所有点的lcalcalca的深度之和.可以发现,dep[lca(u,v)]dep[lca(u,v)]dep[lca(u,v)]就等于从uuu到根与从vvv到根的路径的交集路径的长度.那么只要把[l,r][l,r][l,r...原创 2019-03-25 22:13:05 · 173 阅读 · 0 评论 -
BZOJ 3589 动态树 (树链剖分+线段树)
前言众所周知,90%90\%90%的题目与解法毫无关系。题意有一棵有根树,两种操作。一种是子树内每一个点的权值加上一个同一个数,另一种是查询多条路径的并的点权之和。分析很容易看出是树链剖分+线段树的题目,唯一的问题就是多条路径可能有交集。那么我们只要把每条路径拆成多个部分,每一部分是某重链上连续的一段,就得到了很多区间。然后排序取并集就能在线段树上操作了。AC CODE#incl...原创 2019-03-07 20:03:50 · 325 阅读 · 0 评论