线段树
alan_cty
蒟蒻一只
别打脸(⊙o⊙)哦
展开
-
【ZJOI2008】树的统计
Description给出一棵n个节点的树,和m个操作。每个点有点权,操作有单点修改,树上路径和和树上路径最大主三种。n<=30000,m<=200000,-30000<=权值<=30000。Solution裸的树链剖分。不多解释。 树链剖分学习小记Code#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b原创 2016-03-09 19:45:28 · 892 阅读 · 0 评论 -
【GDOI2018模拟7.12】A
Description n,m<=1e5,注意题目中的低于是指小于等于Solution把逆序对拆成每个点后面小于它的点的个数和 考虑一次操作,影响的点之后这个位置后面权值<=当前权值的点的贡献 这些点的权值会变成0,其他点的权值不会变 那么我们可以离线处理出每个点最早一次被修改的时间,然后对把它对于某一段答案的贡献减掉 这个东西听说可以用树状数组做,然而由于我太菜用了线段树_ (:з」∠)原创 2017-07-14 22:14:25 · 362 阅读 · 0 评论 -
[bzoj4548]【GDOI2018模拟7.14】小奇的糖果
Description给出平面上n个点,每个点有颜色,求一条水平线段最多能包含多少个不包含所有颜色的点 n<=1e5Solution之所以写bzoj前缀是因为我是在bzoj上先过了这道题然后在OJ上卡常卡了一个下午 做法还是太naive 枚举一个不出现的颜色,就变成了许多限制 把这些限制按y坐标排序,在每个限制之前处理一下答案 那么我们就要处理出某个点下面和它在x坐标上相邻的两个点 这个原创 2017-07-14 22:20:06 · 579 阅读 · 2 评论 -
【GDOI2018模拟9.16】幽雅的绽放吧,墨染之樱
Description给出一棵大小为n的树,以及m条祖先后代链,选择第i条边会付出代价ci,求选择代价最小的边使得覆盖整棵树。 n<=3*1e5Solution“愿春死樱花下,释迦入灭日。後人悼我,当奉佛樱花。” 额原谅我中二了,不过只是喜欢上一只忘却了过去的亡灵而已。。。。栋栋搬的好题。。。原题CF671D 栋栋有一种将原问题对偶之后的贪心做法,然而我不会(其实是懒得看)。。。 考虑最简单原创 2017-09-28 21:30:11 · 998 阅读 · 0 评论 -
atcoder agc001F Wide Swap
Description给出一个长度为n的排列p,每次操作你可以交换任意两个满足|i-j|>=k并且|pi-pj|=1的pi和pj。 求任意次操作之后所得的最小字典序的排列。 n<=5*1e5Solution感觉agc的题都是些很吼的思维+结论题啊。。。以后要多做做 这个模型感觉会很难做,我们来考虑转化一下模型。 令q[p[i]]=i,那么操作就变成了交换相邻两个差的绝对值>=k的位置。 可原创 2017-10-12 15:36:31 · 1192 阅读 · 0 评论 -
[51nod1792]Jabby's segment tree
Description将1~n建成一棵线段树,构造方法为mid=(l+r)/2(正统) 多次询问[l,r],求所有查询满足l<=x<=y<=r的[x,y]的复杂度之和 n,q<=1e5Solution考虑每个节点对答案的贡献 发现当我们把[l,r]放在线段树上后,被完全覆盖的区间的贡献只和询问区间的某个端点有关 分成3种情况考虑,两个端点都在区间内,一个在左边一个在区间内,一个在右边一个在区原创 2017-10-24 22:28:03 · 498 阅读 · 0 评论 -
[ARC069F]Flags
Description你有n个点,每个点可以在xi或者是yi,求最优方案下相邻两点的距离的最小值的最大值n<=1e4,xi,yi<=1e9Solution一眼二分,第二眼2-sat,第三眼线段树优化连边 第一次打在考场上没有标称参考我可能写丑了Code#include <cstdio>#include <cstring>#include <algorithm>#define fo(i,a,b原创 2017-11-04 22:06:49 · 460 阅读 · 0 评论 -
【WinterCamp 2013】阿凡达
Description维护一个序列,资瓷 1:将A[l]~A[r]中的每一个A[x]变为(x-l+1)*a mod b 2:询问A[l]~A[r]的和n<=1e9,m<=5*1e4Solution考虑将一次赋值看做一个颜色段,然后同一个颜色段里面的和我们可以用类欧来计算。 用线段树维护是log^2的,但我们其实有一种更加优美的写法 我们可以用一棵平衡树来维护每一个颜色端,这样子复杂度就变成了原创 2017-12-20 22:27:30 · 372 阅读 · 0 评论 -
【WC2016模拟】最假女选手
Description维护一个序列,资瓷: 1:区间加 2:区间取max 3:区间取min 4:区间求和 5:区间求max 6:区间求minn<=5*1e5Solution最近正在搞数据结构专题,于是找了一道吉丽线段树练手题 维护区间和,最大值,次大值,最大值出现次数,最小值,次小值,次小值出现次数即可 细节很多,需要很细心的实现Code#include <cstdio>#incl原创 2017-12-05 17:08:44 · 520 阅读 · 0 评论 -
[CF862F]Mahmoud and Ehab and the final stage
Description给出n个字符串s[i],资瓷两种操作: 1 a b 询问所有[a,b]的子区间[l,r]中LCP(l,r)*(r-l+1)的最大值。 其中LCP(l,r)表示s[l]~s[r]的LCP 2 x st 把s[x]变成stn,q<=1e5,∑|S|<=1e5Solution看到总串长比较小就知道是套路题。 分三种情况考虑。 第一种情况,只有一个串,那么直接用线段树维护区间原创 2018-01-22 08:14:38 · 510 阅读 · 0 评论 -
Try to find out the wrong in the test
Description有n个人排成一排,你需要对这n个人分组,每组必须是连续的一段。 每个人有要求,(c[i],d[i])表示这个人所在的组的最少人数和最多人数。 求最多能分成多少组和方案。 nSolution如果只有d的限制这道题就很好做了。 因为d限制了我们i只能从i前面的一段区间转移过来,不妨设为left[i],显然left是单调的 但是有c的限制就很麻烦了,因为c原创 2018-01-15 17:31:55 · 511 阅读 · 0 评论 -
【清华集训模拟】树
Description给出一棵n个点的树,每个点有点权a[i] 求把这棵树划分成若干条不相交的路径,使得每条路径上的点权和均非负的方案数。 n<=1e5Solution先考虑Dp怎么写,设Fx表示以x为根的子树已经覆盖完成了. 转移两条链,把这两条链上挂着的F值乘起来就是答案。 那么这个东西要如何用数据结构优化? 我们以权值为下标建立线段树,线段树里的每个点维护的是其到当前所做的根x路径上原创 2018-01-19 22:37:36 · 319 阅读 · 0 评论 -
【NOI2018模拟3.28】Subset
Description给出三个排列a,b,c,求对于所有的下标集合S,求 (max(ai),max(bi),max(ci)),i⊆S(max(ai),max(bi),max(ci)),i\subseteq S的所有可能情况。 n<=1e5Solution考虑最大值所属的位置,显然|S|<=3 |S|=1的话就是n |S|=2就是一个三维偏序 |S|=3比较麻烦,考虑容斥。 合法方案就是三原创 2018-03-28 17:02:39 · 444 阅读 · 0 评论 -
[ARC 063 F]Snuke's Coloring 2
Description给出一个wxh的网格图,和n个点,求一个周长最大的矩形,满足这个矩形内部没有点。注意矩形边界上不算在内部。 n<=2*1e5Solution首先让我们来想一个分治做法。 分治了一条中线,我们想要求出跨过中线的答案。 那么对于中线上下两侧,我们做两个单调栈,用扫描线维护当前的右端点,然后左端点只能在单调栈上。 当然你不能暴力求上下单调栈是哪个,我们可以用线段树来维护每一段原创 2018-04-05 11:27:40 · 639 阅读 · 1 评论 -
[CodeChef May Challenge 2018]Edges in Spanning Trees
Description给出两棵树,T1和T2 对于T1中的每一条边e1,你需要求出T2中有多少条边e2满足 1:T1-e1+e2是一棵树 2:T2-e2+e1是一棵树 n<=2e5Solution我们考虑一组限制的两种方法,并且这两种方法能够套在一起 首先,我们知道可以对于T2中的每一条边(u,v),在第一棵树上的u,v打上标记,在lca(u,v)处撤销 这样子我...原创 2018-05-17 16:35:46 · 256 阅读 · 0 评论 -
[LOJ6507]「雅礼集训 2018 Day7」A
Description给出一个长度为n的序列a,要求资瓷区间或,区间与和求区间最小值n<=5e5,ai<2^31Solution让我们先来考虑一个暴力:如果一次操作对某个区间的影响是一样的(即最小值还是那个数),那么我们直接打标记退出;若一次操作对某个区间无影响就直接退出只需要维护区间or和区间and然后你就会发现你过了_ (:з」∠) _这是为什么呢?让我们来分析...原创 2018-11-03 22:33:30 · 1239 阅读 · 0 评论 -
[BZOJ2138]stone
Description给定长度为n的序列A,ai表示位置i有多少个石子。有m次操作,第i次操作从区间[li,ri]中选择ki个石子丢弃,如果不足ki个则全部丢弃保证区间互不相交最大化丢弃石子的字典序n,m<=40000Solution考虑如果我们已经知道了每次要拿几个,如何判断是否合法?一个显然的思路是网络流判断是否满流,换句话说是拆点判断完美匹配hall定理!但是hall...原创 2018-11-26 21:54:14 · 532 阅读 · 0 评论 -
[CF1109F]Sasha and Algorithm of Silence's Sounds
Description给出一个n * m的网格图,保证所有位置上的数形成一个1 ~ n* m的排列。问有多少个值域区间[l,r]满足,[l,r]的数在网格图上的位置形成一棵树这里的树指四连通求导出子图的意义下无环且只有一个连通块。n*m<=200000,n,m<=1000Solution维护一条扫描线,对于扫到的右端点r,我们需要求出最左的左端点L,满足[L,r]无环这个...原创 2019-02-27 11:48:55 · 276 阅读 · 0 评论 -
【NOI2017模拟6.26】A
Description给出一棵树,求树上所有满足路径中任意两个不同点a,b,gcd(a,b)≠agcd(a,b)\not=a的无序路径 n<=1e5Solution先讲讲我在考场上想的辣鸡做法 暴力部分枚举倍数来判断能做到n^2 log n 由于某些奥妙重重的原因这个做法能跑过3*1e4 一条链的话可以预处理出每个点往左/右最多能扩展到的点 然后从左往右扫一遍维护每个点往左能对答案贡献的区原创 2017-06-26 20:46:55 · 648 阅读 · 0 评论 -
【WC模拟】J
Description由于题面过于丧心病狂就直接贴图了 Solution可以把每个操作变成2进制的异或操作。 那么就是修改加询问前缀异或和为st的数的个数。 线段树\分块都可以做啊。 一个优化:有用的状态只有16种,可以提前处理出来。Code#include <cstdio>#include <cstring>#include <algorithm>#define fo(i,a,b)原创 2017-01-21 20:22:17 · 439 阅读 · 0 评论 -
[bzoj1588][HNOI2002]营业额统计
Description给出n个数,求每个数和它前面每个数的差值绝对值的最小值之和。 n<=32767Solution很显然求前驱后驱。 可以离散化后用权值线段树二分找。 也可以直接用splay找。 你喜欢就好喽。。。Code#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;原创 2016-09-14 20:12:38 · 1189 阅读 · 0 评论 -
GDKOI2016 Day 1 T1 魔卡少女
T1 魔卡少女给出N个数,M个操作。操作有修改和询问两种,每次修改将一个数改成另一个数,每次询问一个区间的所有连续自区间的异或和。原创 2016-03-04 18:57:26 · 1450 阅读 · 1 评论 -
GDKOI2016 Day2 T3 项链
T3 项链 给出一个环状字符串,求删除连续一段后剩下的字符为对称的最大长度、首先你要知道怎样的一个字符串算是对称的。一定是由两个回文串拼成的。我们可以倍长原串,然后枚举开头,这样删除的一定是枚举的串的前缀。 用manacher预处理出所有的回文中心的扩展半径。两个合法的回文中心i和j一定满足j-i<=n&j-p[j]<=i+p[i]。并且它的串的长度就是j-i。于是我们用线段树维护一个区间最原创 2016-03-05 12:59:39 · 1123 阅读 · 2 评论 -
[GDOI模拟2016.03.05]魔道研究
Description 给出T个集合,和m个操作,一开始所有集合皆为空。每个操作有两种形式,一是在t集合里加入一个元素x,一种是在t集合里删除一个元素x(保证x存在)。然后从每个集合t中选出前t大的元素加入另一个大集合s中,求s中的前n大元素和。 m,n,t≤300000,所有元素都为不大于109的正整数。Solution 很明显的数据结构题,关键是要如何维护。想到区间前k大,马上就原创 2016-03-07 18:38:55 · 958 阅读 · 0 评论 -
bzoj3638&&【GDOI2016模拟3.20】diyiti
Description给出一个长度为n的序列,a1~an,和m次操作,每次操作分为 0 x val,将ax变成val 1 l r k,询问在区间l~r中,最多k个不重合区间的最大和是多少。 n,m<=10^5,|ai|<=500,1操作<=10000,|val|<=500,1<=k<=20Solution首先,可以肯定的是这道题一定是某种神奇的数据结构,不过好像很难维护。 咦? 如果询问区原创 2016-03-23 21:50:48 · 1004 阅读 · 0 评论 -
【NOIP2012提高组】开车旅行
Description现在有n个城市,每个城市有它的高度HiH_i,保证每个HiH_i互不相同。我们定义两个城市之间的距离disi,j=|Hi−Hj|dis_{i,j}=|H_i-H_j|,并且只能从编号小的城市去到编号大的城市。现在有两个人,小A和小B要开车(雾)去旅行。小A先开一天,小B再开一天。每一天都可以从一个开到另一个城市。小A会选择去离当前城市第二近的城市,小B会选择去离当前城市最近的那原创 2016-03-14 20:47:01 · 3573 阅读 · 0 评论 -
【NOIP2015模拟11.2】有趣的有趣的家庭菜园
Description给出一个序列,每个位置有高度h,费用c和权值b。你现在可以移除一些位置,代价为移除位置的费用和。然后,你可以的到所有满足以下条件的位置的权值的收益。 1:所有没有被移除的j,且jSolution很明显,最后选出来的东西的高度是上凸函数。 那我们可以设两个状态f和g,表示从左/右开始的递增的最大获利。 那么f[i]=maxj<i,h[j]<=h[i](f[j]−∑k=j+1原创 2016-04-07 19:13:39 · 758 阅读 · 0 评论 -
【NOIP2015模拟11.2晚】我的天
Description有n个人排成一列。给出m次操作,每次操作让区间l~r的人互相认识。求每次操作后新增了多少对认识的人。 n,m<=300000Solution很显然,每个人认识的人都是一个区间内的。为了避免算重复,我们可以只计算他左边和他认识的人。设left[i]表示left[i]~i-1都和i认识,那么答案就为∑ni=1i−left[i]\sum_{i=1}^{n}i-left[i]。然后每原创 2016-04-09 16:47:07 · 570 阅读 · 0 评论 -
【GDOI2014模拟】雨天的尾巴
Description给出一个n个节点的树和m次操作,每次操作把x到y的路径上的所有的点的z种物品+1. 求最后每个点最多的物品编号。若有多个相同的取编号小的,若没有则输出0. n,m<=10^5,z<=10^9Solution首先,这道题并没有在线和离线之分,所以可以任意乱搞。 我们把所有z离散化,这样就只有m种取值。 那么对于一次操作,我们相当于做一次线段覆盖,在x+1,y+1,lca-原创 2016-05-25 19:07:06 · 658 阅读 · 0 评论 -
【HNOI2016模拟4.13】a
Description给出一棵n个节点的树,每个节点ai的范围在1~m,和q次询问,每次询问x到y的路径中小于/等于/大于k的数的个数。强制在线。 n,q<=300000,m<=150000Solution裸题,用来练模板。 有两种做法,一种是主席数用lca直接搞。 一种是链剖开m棵线段树暴力搞。 这里打的是第一种。Code#include<cstdio>#include<cstring>原创 2016-04-20 19:40:36 · 861 阅读 · 0 评论 -
[bzoj3211]花神游历各国
Description写一个数据结构兹瓷区间求和和区间开方。 n<=10^5,m<=2*10^5,ai<=10^9Solution区间开平方?暴力开呗。 反正10^9也不需要开多少次,只不过常数大了点罢了。 用线段树维护区间和,还有区间标记,表示这个区间是不是还有可以开方的数(1&0)。 不过,有一个迷之问题,为什么一定要把0给标记,不然会惨绝人寰地超时? 表示奥妙重重。Code#incl原创 2016-06-11 18:45:17 · 848 阅读 · 0 评论 -
【NOIP2013模拟联考5】军训(training)
Description给出一个序列,序列的每个位置有两个值,H和G。 现在要把这个序列分成几份。每一段必须是连续的,并且要求每一段的max(Hi)的和<=lim,且使每一段的∑Gi的最大值最小。 求这个值。 n<=20000Solution看到双最值,直接二分就好~(≧▽≦)/~啦啦啦 关键是如何判断。 我们可以写一个n^2的dp,设fi表示以这一段i结尾的最小的max(Hi)的和,那么转原创 2016-06-27 12:46:49 · 809 阅读 · 0 评论 -
[bzoj3626][LNOI2014]LCA
Description给出一棵树,q次询问,每次询问∑i=lrdeep(lca(i,z))\sum_{i=l}^{r}deep(lca(i,z)) n,q<=5*10^4Solution这道题在线明显不可做。(在线A了的大犇请收下我的膝盖) 首先,我们来思考一下,一组询问怎么做? 暴力的想法,我们把每要询问的点往上都打上标记,然后把z点往上找到每个标记第一次出现的位置。 其实我们可以发现,每原创 2016-06-12 21:08:12 · 1677 阅读 · 4 评论 -
[bzoj2819]Nim
Description给出一棵树,每次修改一个点的值或询问x,y之间的路径上的数组成的石子游戏先手有没有必胜方案。(普通版SG) n,m<=5*10^5Solution哎呀,dfs带一个参过~(≧▽≦)/~啦啦啦 虽然很对不起vfleaking爷,但是我也懒得改人工栈了。(受我深情一拜) 先来科(kou)普(hu)一下,先手必胜就是这条路径上的数的异或和不为0. 似乎刚开始想到了链剖,但是两原创 2016-06-15 21:02:57 · 680 阅读 · 0 评论 -
【GDOI2016模拟3.15】染色
Description给出一棵树,初始时所有点都是白色。每次操作把一个点染黑,或是询问所有黑点到这个点的距离和。 n,m<=10^5Solution首先,答案是∑i是黑色dis[i]+dis[x]−dis[lca(i,x)]\sum_{i是黑色}{dis[i]+dis[x]-dis[lca(i,x)]} 那么我们知道了所有黑色点的距离和,和黑色点的个数,剩下的就 和[bzoj3626][LNO原创 2016-06-15 21:22:03 · 1495 阅读 · 0 评论 -
[51nod1766]树上的最远点对
Description给出一棵n个点的树,每次询问编号在[a,b]中的一个点和编号在[c,d]一个点的最远距离。 n<=10^5Solution我们知道,树上最远的距离是树的直径。 然后,直径可以由两个点集中的直径的总共四个端点两两配对得到。 于是我们就可以用线段树来维护这个东西。 注意求距离要用欧拉序列,不能用倍增,否则会爆炸性超时。Code#include<cmath>#include原创 2016-07-07 14:38:10 · 1065 阅读 · 0 评论 -
Snow的追寻
Description给出一棵有根树,1为根。 给出q次询问,每次询问x,y表示除x,y为根的子树外,剩下的树的直径的长度。 n,q<=10^5Solution既然和子树有关,那么我们就维护树的dfs序。 然后每个区间维护直径的长度。用线段树,同51nod1766树上的最远点对. 那么不能用x,y为根的子树就是不能用某两个区间。这样就把原序列分成了最多三个区间,合并起来就好了。Code#in原创 2016-07-08 13:03:24 · 842 阅读 · 0 评论 -
【GDOI2017模拟8.14】守鹤之砂
Description有n个数,执行n-1次合并。 每次合并两个数所在的集合并进行一次询问。 把这个合并后的集合里的数按照数轴上的顺序排序,你可以任意交换相邻的两个数,时间为他们之间的距离。 交换可以同时进行,一个数在进行交换时不能被选择。 当最小值和最大值进行交换时,时间为距离/2并且询问结束。 求最小时间。 n<=50000Solution首先,一次询问的答案是,对于相邻的两个数aj原创 2016-08-15 22:22:36 · 601 阅读 · 0 评论 -
[校内模拟]Invert
Description在一个n*n的棋盘上,每个格子要么是黑色,要么是白色有两个人在博弈,每次操作者可以选择一个白色格子,和一个不超过k的正整数a,然后将以这个格子为右下角的边长为a的正方形反色,需要保证这个正方形不越界,无法操作者输问先手是否必胜白色的格子为给出的m个矩形的并k,n<=1e9,m<=5e5Solution考虑另一个游戏,每个格子有若干个koishi,每次...原创 2019-06-03 15:39:17 · 294 阅读 · 0 评论