
数据结构--线段树
ez_yww
这个作者很懒,什么都没留下…
展开
-
HDU 3436 题解
有一个队列,开始时第i个数是i。 有三种操作。 Top x:把x放到队头。 Query x:查询x是第几个数。 Rank x:查询第x个数。原创 2016-07-06 10:16:29 · 375 阅读 · 0 评论 -
【BZOJ4653】【NOI2016】区间 线段树
题目大意 数轴上有nn个闭区间[l1,r1],[l2,r2],…,[ln,rn][l_1,r_1],[l_2,r_2],\ldots,[l_n,r_n],你要选出mm个区间,使得存在一个xx,对于每个选出的区间[li,ri][l_i,r_i]都有x∈[li,ri]x\in[l_i,r_i]。 一个方案的代价是最长区间长度减去最短区间长度。 求最小的代价。 无解输出−1-1。 m≤n≤500原创 2017-12-01 11:00:32 · 377 阅读 · 0 评论 -
【XSY2524】唯一神 状压DP 矩阵快速幂 FFT
题目大意 给你一个网格,每个格子有概率是11或是00。告诉你每个点是00的概率,求11的连通块个数modd=0\bmod d=0的概率。 最开始所有格子的概率相等。有qq次修改,每次修改一个格子的概率。要求输出初始时和每次修改后的概率。 n≤200000,m≤3,d≤10,q≤1000n\leq 200000,m\leq 3,d\leq 10,q\leq 1000题解 很容易想到状压DP:前原创 2017-12-20 07:41:57 · 435 阅读 · 0 评论 -
【BZOJ3999】【TJOI2015】旅游 树剖
题目大意 给你一棵树,有nn个点。有qq个操作,每次要你从xx到yy的路径上选两个点,使得距离xx比较远的点的点权−-距离xx比较近的点的点权最大,然后把这条路径上所有点的点权+v+v。 n,q≤50000n,q\leq 50000题解 这种题没什么意思,直接树剖就好了。 线段树上每个点记录最大值,最小值,从左往右走和从右往左走的最大收益。 时间复杂度:O(n+qlog2n)O(n+q\l原创 2017-11-28 08:20:42 · 283 阅读 · 0 评论 -
【XSY2715】回文串 树链剖分 回文自动机
题目描述 有一个字符串ss,长度为nn。有mm个操作:addl caddl ~c:在ss左边加上一个字符ccaddr caddr~c:在ss右边加上一个字符transl l1 r1 l2 r2transl~l_1~r_1~l_2~r_2:有两个ss的子串s1=s[l1…r1],s2=s[l2…r2]s_1=s[l_1\ldots r_1],s_2=s[l_2\ldots r_2]。原创 2018-01-11 11:02:18 · 341 阅读 · 0 评论 -
【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树
题目大意 给你一棵有根树,有nn个点。还有一个参数kk。你每次要删除一条长度为kk(kk个点)的祖先-后代链,问你最少几次删完。现在有qq个询问,每次给你一个kk,问你答案是多少。 n≤105,k≤109n\leq {10}^5,k\leq {10}^9题解 设ll为这棵树的叶子个数,显然当k>k>树的深度时答案都是ll。 下面要证明:答案是O(l+n−lk)O(l+\frac{n-l}{k原创 2017-12-29 08:06:47 · 485 阅读 · 0 评论 -
【XSY2720】区间第k小 整体二分 可持久化线段树
题目描述 给你你个序列,每次求区间第kk小的数。 本题中,如果一个数在询问区间中出现了超过ww次,那么就把这个数视为nn。 强制在线。 n≤100000,ain,w≤nn\leq 100000,a_i题解 考虑整体二分。 先看看离线要怎么做。 现在我们要计算每个数对每个区间的贡献。 对于每个询问区间和每种数,让这个区间最右边ww个数对这个询问原创 2018-01-14 20:52:02 · 335 阅读 · 0 评论 -
【XSY2732】Decalcomania 可持久化线段树 分治
题目描述 有一个陶瓷瓶周围有nn个可以印花的位置。第ii个与第i+1i+1个位置之间的距离为did_i,在第ii个位置印图案要tit_i秒。 机器刚开始在00号位置,可以以11单位长度每秒的速度移动。 一个位置只能印一个图案。 现在有mm秒,问你最多能印几个图案。 保证时间不足以绕陶瓷瓶一圈。 n≤100000n\leq 100000题解 肯定是先原创 2018-01-23 16:41:48 · 489 阅读 · 0 评论 -
【XSY1551】往事 广义后缀数组 线段树合并
题目大意 给你一颗trie树,令si" role="presentation" style="position: relative;">sisis_i为点i" role="presentation" style="position: relative;">iii到根的路径上的字符组成的字符串。求maxu≠v(LCP(su,sv)+LCS(su,sv))" role="prese原创 2017-08-10 19:37:18 · 767 阅读 · 1 评论 -
【XSY2707】snow 线段树 并查集
题目描述 有nn个人和一条长度为tt的线段,每个人还有一个工作范围(是一个区间)。最开始整条线段都是白的。定义每个人的工作长度是这个人的工作范围中白色部分的长度(会随着线段改变而改变)。每一天开始时你要选择一个人满足这个人的工作长度最小(如果有多个就选编号最小的)。把这个人的工作区间染黑。请你输出每天你选了哪个人。 保证工作范围中左端点和右端点单调递增。 n≤300000n\le原创 2018-01-10 08:41:39 · 281 阅读 · 0 评论 -
【BZOJ3236】【AHOI2013】作业 线段树 分治 树状数组
题目描述 给你一个长度为nn的数列,还有mm个询问,对于每个询问(l,r,a,b)(l,r,a,b),输出1.区间[l,r][l,r]有多少范围在[a,b][a,b]的数;2.区间[l,r][l,r]有多少范围在[a,b][a,b]的权值。 n≤100000,m≤1000000n\leq 100000,m\leq 1000000题解 这道题莫队可以水过。 这里讲一个更优秀的算法。 建一棵权原创 2017-10-31 21:50:05 · 654 阅读 · 0 评论 -
【XSY2528】道路建设 LCT 可持久化线段树
题目描述 给你一个nn个点mm条边图,qq个询问,每次问你边权在[l,r][l,r]之间的边组成的最小生成树(森林)的边权和。强制在线。 n,m,q≤100000n,m,q\leq 100000题解 考虑离线做法。从大到小加边,用LCT维护当前的最小生成树。维护一棵线段树,第ii个位置表示当前的最小生成树中边权为ii的边的权值和。当一条边被加入时就在对应位置加上边权,删掉时就减掉边权。假设已经原创 2017-10-05 16:51:18 · 497 阅读 · 0 评论 -
BZOJ 3110 题解
有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。原创 2016-07-06 10:56:29 · 368 阅读 · 0 评论 -
HDU 4729 题解
有一棵树,给你边的容量。每次给你s,t,k,a,b,求s到t的最大流。k是总预算,a是加一条边的费用(容量为1),b是扩充一条边的费用。原创 2016-07-07 11:21:24 · 395 阅读 · 0 评论 -
HDU 4348 题解
给你n个数,a1~an,你需要实现一下四种操作: 1.C l r d:时间+1,把al~ar全部加上d。 2.Q l r:查询al~ar的和。 3.H l r t:查询在时间t时al~ar的和。 4.B r:返回时间t。原创 2016-07-07 11:29:19 · 309 阅读 · 0 评论 -
BZOJ 3932(CQOI 2015) 题解
实现一个查询系统。原创 2016-07-07 15:56:12 · 279 阅读 · 0 评论 -
【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序
题目大意 Bob有一棵nn个点的有根树,其中11号点是根节点。Bob在每个点上涂了颜色,并且每个点上的颜色不同。定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色。Bob可能会进行这几种操作: 1 x1~x:把点xx到根节点的路径上所有的点染上一种没有用过的新颜色。 2 x y2~x~y:求xx到yy的路径的权值。 3 x y3~x~y:在以xx为根的子树中选原创 2017-08-13 21:03:51 · 416 阅读 · 0 评论 -
【XSY2484】mex 离散化 线段树
题目大意 给你一个无限长的数组,初始的时候都为00,有3种操作: 操作11是把给定区间[l,r][l,r]设为11; 操作22是把给定区间[l,r][l,r]设为00; 操作33把给定区间[l,r]0,1[l,r]0,1反转; 一共nn个操作,每次操作后要输出最小位置的00。 n≤100000,1≤l≤r≤1018n\leq 100000,1\leq l\leq r\leq {10}^{原创 2017-09-08 20:23:59 · 316 阅读 · 0 评论 -
【XSY1294】sub 树链剖分
【XSY1294】sub 树链剖分题目描述 给你一棵nn个点的无根树,节点ii有权值viv_i。现在有mm次操作,操作有如下两种: 1 x y1~x~y:把vxv_x改成yy。 22:选择一个连通块(也可以不选择),使得点权和最大。输出这个点权和。 n,m≤105,|vi|,|y|≤1000n,m\leq {10}^5,|v_i|,|y|\leq 1000题解 考虑暴力,是的儿子dpx原创 2017-09-21 21:13:37 · 827 阅读 · 0 评论 -
【XSY1284】【BZOJ3813】【清华集训2014】奇数国 线段树 数学
题目描述 给你一个长度为nn的数列,第ii个数为aia_i。每个数的质因子都只有前6060个质数。有qq个询问,每次给你l,rl,r,求ϕ(∏ri=lai)\phi(\prod_{i=l}^ra_i) 模数为1996199319961993,是个质数 n=100000,q≤100000n=100000,q\leq 100000题解 水题 ϕ(x)=x∏pi|x(1−1pi)\phi(x)原创 2017-10-03 19:34:32 · 277 阅读 · 0 评论 -
【CF768G】The Winds of Winter 可持久化线段树 DFS序
题目大意 给定一棵nn个点的树,对于树上每个结点,将它删去,然后可以将得到的森林中任意一个点与其父亲断开并连接到另一颗树上,对每一个点求出森林中所有树sizesize最大值的最小值。 n≤100000n\leq 100000题解 首先用DFS序+可持久化线段树求出删掉这个点后剩下的联通块的大小的最大值maxmax、次大值secsec、最小值minmin。这里要维护两棵可持久化线段树,一棵是DF原创 2017-10-19 19:14:06 · 424 阅读 · 0 评论 -
【XSY2727】Remove Dilworth定理 堆 树状数组 DP
题目描述 一个二维平面上有nn个梯形,满足: 所有梯形的下底边在直线y=0y=0上。 所有梯形的上底边在直线y=1y=1上。 没有两个点的坐标相同。 你一次可以选择任意多个梯形,必须满足这些梯形两两重叠,然后删掉这些梯形。 问你最少几次可以删掉所有梯形。 n≤105n\leq {10}^5题解 先把坐标离散化。 定义AA为所有梯形原创 2018-01-19 08:56:54 · 332 阅读 · 0 评论