
线段树
cy41
celery cabbage
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
19蓝桥国赛B组C/C++ I第八大奇迹
题意:有一条河,沿河的一侧生活着一个部落。这个一字型的部落有n个据点,从左至右依次编号1~n。部落的人们有时会在某个据点建立建筑,每个建筑都有各自的价值。一开始,每个据点的都没有建筑,价值都是0。如果在已有建筑的据点建立新的建筑,那么新的建筑会代替旧的建筑(旧的建筑就此消失)。有两种操作C和Q:1、C x y,表示在据点x建立一个价值为y的建筑。2、Q x y,询问在据点x~y之间(包括...原创 2020-02-22 15:44:35 · 734 阅读 · 6 评论 -
牛客寒假2020集训营2补题
题意:将a数组排序。定义dp[x],为将下标属于[1,x]内的元素进行若干次魔法达到的最小值。则一个显然的想法是枚举i为终点,j为最后一次进行魔法的位置,则有dp[i]=j∈min(dp[j]−a[j+1])+a[i]dp[i]=j\in min(dp[j]-a[j+1])+a[i]dp[i]=j∈min(dp[j]−a[j+1])+a[i];...原创 2020-02-06 18:26:46 · 179 阅读 · 0 评论 -
cf501D(变进制数,康托展开)
题目链接:cf501D题意:给出两个0~n-1的全排列,n<=200000,假设两个全排列分别是第x,y个全排列,现在要你计算第(x+y)%(n!)个全排列,并输出。好久以前做的了,咕咕咕了好久,比赛打完了来更一下。变进制数的概念请见这里:yummy的博客大概有两个应用:将一个全排列转化为变进制数,变进制数转为十进制算出第几个全排列。变进制数转化为全排列。该题先算出两个变进...原创 2019-12-15 10:05:32 · 271 阅读 · 0 评论 -
F. Dominant Indices(动态开点线段树 or dsu on tree)
题目链接:F. Dominant Indices题意:有根树,根为1,定义d[x][i]d[x][i]d[x][i]为x的子树中距离x为i的点的个数,对于每个点,求出最小的i使得d[x][i]d[x][i]d[x][i]最大。dis[x]dis[x]dis[x]表示x与树根的距离,对于每个子树动态开点维护距离为valvalval的点的个数,以及最大值,dfs回溯合并线段树即可。参考了一下橘子...原创 2019-11-09 16:07:00 · 288 阅读 · 0 评论 -
P1486 [NOI2004]郁闷的出纳员(线段树或splay)
题目链接:P1486 [NOI2004]郁闷的出纳员题意:中文题意一、权值线段树注意到加值与减值都是对整体加减,故可以记录修改量changechangechange,表示所有的+ki+k_i+ki与−ki-k_i−ki,那么插值可以看做插一个权值为x−changex-changex−change的点,工资下降可看做是对值域区间[0,minn−change−1][0,minn-change...原创 2019-10-29 21:23:39 · 223 阅读 · 0 评论 -
codeforces 19D(线段树端点维护set 或脑补CDQ?)
题意:二维平面三种操作,添加一个点,删除一个点,询问一个点的严格右上方中离他最近的点,若有多个则横坐标小的优先,操作次数2∗1052*10^52∗105,保证操作合法。对横坐标离散化后,线段树叶子节点建立set,存放y坐标,那么增与删都很好做,同时线段树维护y坐标最大值,查询的时候如果左右子树同时都可能满足,则优先查询左子树,若找不到答案再查右子树,查询过程中同时使用max进行搜索剪枝。#in...原创 2019-10-28 15:43:30 · 195 阅读 · 0 评论 -
2019杭电多校第二场Longest Subarray HDU - 6602(线段树,数字贡献度)
Longest Subarray HDU - 6602题意:一段长度为n的序列,每个元素都的值域为[1,c][1,c][1,c],给出一个参数k,现在要找到一个最大的区间,使得区间内的某种数字要么出现了>=k>=k>=k次,要么出现了0次。∀x∈[1,c],∑i=lr[ai=x]=0or∑i=lr[ai=x]>=k{\forall}x\in[1,...原创 2019-08-22 09:20:52 · 229 阅读 · 0 评论 -
李超树 bzoj1568
这个讲的不错:算法|李超线段树初步(算法讲解+例题)用处:用于处理二维平面内的最优势线段(或直线),一般支持两种操作,向二维平面插入一条新的线段(或直线),询问x=a与所有的线段(或直线)的交点的最大(最小值)。假设我们插入的是一条直线,他的方程为:y=ax+by=ax+by=ax+b。线段树的区间下标代表x坐标。那么插入的情况大体有四种:这里就最大值来讨论。若当前区间内还没有最优势...原创 2019-09-02 09:36:43 · 288 阅读 · 0 评论 -
P1505 [国家集训队]旅游(树链剖分)
题目链接:P1505 [国家集训队]旅游对于边的剖分,将每条边的编号赋值为其后向点的dfs序编号,因为在dfs过程中,儿子节点有且只有一个直接父亲,那么可以将这条边的编号写作这个儿子的编号。修改一条链上的边权,与点权不同的是,当两个点处于同一条重链的时候,深度较浅的那个点对应的边不属于我们修改的范围:void updatachain(int x,int y){ while(topp[...原创 2019-09-02 21:33:19 · 192 阅读 · 0 评论 -
2019牛客暑期多校训练营(第二场)E-MAZE(线段树维护矩阵乘法)
题意:给定一个大小为n*m(n<=5e4,m<=10n<=5e4,m<=10n<=5e4,m<=10)的矩阵,其中只有0,1元素,0表示该点可达,1表示不可达,接下来q(q<=5e4q<=5e4q<=5e4)次操作:可以选择一个格子翻转询问从(1,x)->(n,y)的方案数,每次只能向...原创 2019-09-11 20:48:34 · 202 阅读 · 0 评论 -
uoj164【清华集训2015】V
题目链接:#164. 【清华集训2015】V这个东西,,,诡异的标记下传。一共有五种操作,区间加法,区间减法(减到0就不减了),区间覆盖,单点询问,单点历史最大值。非常巧妙的使用了一个pair来进行标记。y=max(x+a,b)。就是可以看做建立一个直角坐标系,其中x轴表示原数字,y轴表示修改后的数字,那么加法可以看做是y=x+ay=x+ay=x+a,减法可以看做为y=max(x−a,0)...原创 2019-08-12 16:19:04 · 300 阅读 · 0 评论 -
线段树区间加一个等比数列
题目大概是这样的:给出一个长度为nnn的序列,mmm次询问,qqq为参数,有两种操作给区间∀i∈[l,r]{\forall}i\in[l,r]∀i∈[l,r]的数字加上qi−lq^{i-l}qi−l询问区间[l,r][l,r][l,r]的数字和n,m<=105,1<q<=109n,m<=10^5,1<q<...原创 2019-08-16 09:17:19 · 1481 阅读 · 0 评论 -
2019牛客暑期多校训练营(第八场)E-Explorer(启发式合并?)
题意:有nnn个点,mmm条边,每条边有一个容量的上下限为[li,ri][l_i,r_i][li,ri],现在要给所有边一个统一的容量,使得可以从111走到nnn节点,问这样的容量有多少种取值。首先可以对所有的l,rl,rl,r离散化,当然这里我们需要像扫描线一样将一个点表示成一个区间,一个左闭右开的区间,所以将所有的r+1r+1r+1,然后对线段树上的每个节点开一个vector,用来保存满...原创 2019-08-21 09:07:37 · 159 阅读 · 0 评论 -
2019牛客暑期多校训练营(第九场)H-Cutting Bamboos(主席树)
题意:n个竹子,有高度,q次询问,询问之间是独立的,每次查询输入l,r,x,yl,r,x,yl,r,x,y代表砍区间[l,r][l,r][l,r]内的竹子砍y次,最后一次要砍成0,每次砍掉的总长度相同,问第x次砍的高度是多少。赛中榜有点歪吧,就一直在想j怎么写,H也没怎么看,最后剩20分钟的时候,lt跑过来和我说这个好像可以二分做,然后我就想可以套主席树写,就赶紧写,结果第一次写完的时候少维护了...原创 2019-08-15 20:00:50 · 183 阅读 · 1 评论 -
K-th occurrence HDU-6704(后缀数组+线段树+主席树)
题意:给出一个长度为n的字符串,q次询问,每次询问给出参数l,r,kl,r,kl,r,k,询问整个字符串中第k个子串slsl+1....srs_ls_{l+1}....s_rslsl+1....sr。数据范围:10510^5105后缀数组的一些定义:后缀字符串:以i开始一直到结尾的字符串。sa[i]sa[i]sa[i]:排名为i的后缀字符串。rank[i]rank[i]rank[...原创 2019-08-24 16:36:30 · 212 阅读 · 0 评论 -
HDU-6703 array(主席树)
题意:给出一个序列,保证序列是一个1~n的全排列,q次操作,两种类型,一是给a[i]a[i]a[i]加10710^7107,另一种是给出r,k,询问一个最小的数字x,使得x>=kx>=kx>=k,x不等于区间[1,r]内的任何一个数字,强制在线,数据范围:n,m<=105,k<=nn,m<=10^5,k<=n...原创 2019-08-23 20:15:16 · 280 阅读 · 1 评论 -
CodeForces - 160E
题意:在一条[1,109][1,10^9][1,109]的公路上有n辆车,容量无限大,每个车的始发站为lil_ili,终点站为rir_iri,发车时间为tit_iti,你可以认为公交车停车行驶不花时间,即从li到ril_i到r_ili到ri出发时间为tit_iti,到达时间也为tit_iti,然后有m个人,每个人在sjs_jsj处等待,要去往fjf_jfj,这个人会在hjh_jh...原创 2019-08-15 08:52:06 · 289 阅读 · 0 评论 -
2019西安邀请赛 E.Tree(树链剖分)
题目链接:Tree题意:一棵树,有点权,支持链上所有点与一个数字,或一个数字,询问链上所有点异或和异或题目给定的数字是否为正数。树链剖分将链转换为区间。先考虑线段树的操作,将点权拆解成二进制,那么区间与,或就相当于区间覆盖0,1,线段树维护区间内每一位的1的个数。对于操作1,2直接做。对于查询3,可以做30次查询,每次查询链上所有数字这一位上1的个数是否为奇数,若为奇数说明最终的异或答案...原创 2019-09-03 10:48:07 · 295 阅读 · 2 评论 -
P3313 [SDOI2014]旅行(树链剖分+线段树动态开点)
题意:一棵树,树上的点有不同的权值以及属性,支持四种操作:修改某个点的属性修改某个点的点权询问从x到y的链上,与x相同的属性的点的权值和。询问从x到y的链上,与x相同属性的点权最大值。数据范围:树的点数,属性值,询问次数<=105<=10^5<=105,一个点的点权在所有时刻都是<=104<=10^4<=104的正整...原创 2019-09-03 15:56:02 · 229 阅读 · 0 评论 -
P4137 Rmq Problem / mex(无修改区间最小的未出现过的数)
题目链接:P4137 Rmq Problem / mex考虑到数字只有n个,那么每次询问的答案肯定在[0,n+1][0,n+1][0,n+1]范围内,所以对于值大于n+1的元素无需考虑。前缀主席树,每个主席树维护权值最后一次出现的位置,那么对于查询[l,r][l,r][l,r]就是查找第r棵树上出现位置小于lll的权值,那么只需要维护最后一次出现位置的最小值即可。#include<bi...原创 2019-10-10 12:07:28 · 533 阅读 · 0 评论 -
2019牛客国庆集训派对day3 Grid(线段树+小容斥)
题意:一个二维矩阵,最开始每个点都独自属于自身连通块,接下来有两种操作,一种是将行号属于i∈[a,b]i\in[a,b]i∈[a,b]的画一条横线(即1<=j<m,(i,j)连接(i,j+1)1<=j<m,(i,j)连接(i,j+1)1<=j<m,(i,j)连接(i,j+1))。第二种是画竖线,让你在每次操作之后输出连通块的个数。假设矩阵大小为n∗mn*mn...原创 2019-10-04 09:52:00 · 244 阅读 · 5 评论 -
2019牛客国庆集训派对day2 C(主席树)
题意:多组输入,长度为n的序列,每个人有属性值为aia_iai,多次询问,询问区间[l,r][l,r][l,r],最大的h,使得有起码h个人的属性值也是大于等于h的。题目链接:C主席树上判断往左还是往右走就好,优先向右走,否则用一个变量加上右子树,判断左子树。#include<bits/stdc++.h>using namespace std;typedef long ...原创 2019-10-02 19:10:58 · 159 阅读 · 0 评论 -
HDU-4630(离线)
题目链接:HDU-4630题意:1~n的全排列,多次询问区间内,两个数字gcd的最大值预处理出一个数字的所有因子,如果一个因子出现两次以上说明可能作为答案。对询问按照右端点排序。按位置从小到大枚举,枚举该数字的所有因子,如果之前该因子出现过,则在该因子之前的位置处更新值为该因子。如果要用线段树维护,那直接做就行。如果要用树状数组维护,树状数组维护的是具有前缀性质的,[l,r][l,r]...原创 2019-09-19 21:17:28 · 613 阅读 · 0 评论 -
Transformation HDU - 4578(区间混合标记)
题意:区间加,区间乘,区间覆盖,区间一,二,三次幂和。维护三个标记,乘法的,加法的,覆盖的。考虑三种操作的到来时间。如果该次操作为覆盖的话,前两种标记应该直接失效如果该次为乘法的话,那么应该给加法标记也乘上这个值,这样才能使(x+b)a -> ax+b*a,在标记下传时变得可维护。如果为加法的话就直接加。标记下传的时候注意如果有覆盖标记,那么左右子树的乘法及加法失效。加法标记需...原创 2019-09-16 19:51:49 · 183 阅读 · 0 评论 -
可持久化并查集加强版
题意:中文题目链接:AcWing270. 可持久化并查集加强版前置知识:可持久化数组,主席树。每个版本用一个线段树来维护节点的父亲是谁,该联通块的节点数量,线段树只有叶子节点有意义,其余都是无意义的。最开始的时候,所有节点的父亲都是自己,每个联通块的秩都为1。按主席树那样用root来表示第k个版本对应的线段树。对于合并操作,按秩合并,将秩较小的合并到大的上面,相当于两次更新,第一次将x...原创 2019-09-15 10:53:01 · 255 阅读 · 0 评论 -
Simple Data Structures 2019银川网络赛A题(线段树)
题目链接:Simple Data Structures赛中写了一个复杂度教高的写法,在数据随机的情况下大概是一秒左右起伏,当时写了一个暴力对拍,拍了十分钟随机数据都可以过,结果比赛过程中我也不知道多会改的题面说不可以用lld要用I64d就很无语。。。这个做法是参考18年wannfly-camp中提到过的区间与,区间或,区间最大值的写法,可以看一下我这篇:区间或,区间与,区间最大值#inclu...原创 2019-09-14 11:09:47 · 260 阅读 · 0 评论 -
bzoj2243 染色(树链剖分+线段树)
题目链接:bzoj2243 染色题意:一棵树,有点权,覆盖链上的颜色,询问链上颜色的段数。序列的颜色段数很好求,只要维护区间颜色段数,以及最左端与最右端的颜色种类即可。考虑树上操作,可以树链剖分将树上操作转化为链上操作。修改很好做查询需注意。链上版本可以拆为两个:x往上跳,y往上跳,可以自己定义序列方向为x->y,那么只需要合并时候注意一下就好。#include<bits/...原创 2019-09-12 14:56:52 · 216 阅读 · 0 评论 -
bzoj 3307 雨天的尾巴(树上差分,动态开点线段树,线段树的合并)
题目链接:AcWing 353题意:一颗树,m次操作,x,y,z,每次给x到y的链上的所有点都增加一个种类为z的物品,问最后每个点上最多的物品是什么,若有多个物品相同,则输出编号最小的。数据范围:n,m<=105,1<=z<=109n,m<=10^5,1<=z<=10^9n,m<=105,1<=z&...原创 2019-09-09 13:34:44 · 170 阅读 · 0 评论 -
牛客练习赛51 F-ABCBA(树链剖分,线段树,状态转移)
题目链接:F-ABCBA题意:给出一颗树,树上节点为一个字母,q次询问,每次询问u,v,从v到u的链上组成的字符串,包含序列"ABCBA"的个数(不是子串,可以不连续)。给要求的这个序列编号:1,2,3,4,5;首先树剖两次dfs预处理。定义a[i][j]a[i][j]a[i][j]表示当前串包含序列[i,j][i,j][i,j]的数量。用线段树来维护,正着合并以及反着合并,因为树剖查询...原创 2019-09-07 10:36:37 · 222 阅读 · 0 评论 -
CodeForces - 914D
题意:支持单点修改,询问区间内修改一个数字可否使得区间内所有数字的gcd是x的倍数,询问并不真的改变序列中的数字。题目链接:CodeForces - 914D线段树维护区间gcd。询问的时候,如果区间拆不开,那么就继续搜下去就可以如果可以拆开成两半:查询左右区间的gcd为lanslanslans和ransransrans,如果lans%x==0&&ra...原创 2019-08-14 14:21:48 · 220 阅读 · 0 评论 -
2019杭电多校第六场Snowy Smile HDU-6638
题目链接:HDU - 6638题意:二维平面内n个点,有不同的点权,问随便一个矩形(平行于x,y轴)能圈住的最大权值和为多少,可以不选。二维的最大子段和。谁如果把这道题中的东西离散化成一个矩阵,谁傻逼(我傻逼),离散化成这个东西的话复杂度就是n3n^3n3起步了。具体来,离散化了x,y,然后记录每个x对应的y出现的位置及他的权值。枚举上下边界,每次刚开始枚举的时候建一颗全部为0的线段树(...原创 2019-08-09 19:44:26 · 560 阅读 · 0 评论 -
区间或,区间与,区间最大值
题意如题,数据大概在:n,m<=105,0<=x<=109n,m<=10^5,0<=x<=10^9n,m<=105,0<=x<=109将一个数字拆成二进制的样子,那么与,或运算对每一位都做一次,那么就转化成了区间加减法。如果一个子区间全1或全0就可以回溯了,否则继续递归下去暴力改数字。没找到...原创 2019-08-14 09:29:17 · 1497 阅读 · 0 评论 -
主席树题目总结
前置知识:基于值域的整体第k大(权值线段树)写主席树必定需要注意空间的开销,一定要开够若长度为n,修改为m次,则空间复杂度为n+m*logn。可以在我的博客里翻一翻2333。基础问题,求解区间第k大,或者区间小于等于k的个数:poj-2104HDU-4417下面两个前置知识LCAP2633 Count on a treeDistance on the tree ...原创 2019-06-13 09:50:35 · 359 阅读 · 0 评论 -
求区间不同数的个数
在线做法:(主席树)参考自:https://blog.youkuaiyun.com/aozil_yang/article/details/65448883对于每一颗线段树我们只保留到目前为止每个数字最后出现的位置,即对于第k棵线段树我们将区间[1,K]中每个数字最后出现的位置处标记为1,之前的为0。即若到目前为止序列从1到n出现的数字为:1,1,2,3,2,4的话,第六颗线段树是在这样的一个...原创 2019-06-12 22:26:28 · 3930 阅读 · 0 评论 -
I.SHT的梦想
题目链接:http://acm.nuc.edu.cn/OJ/contest/show/54/1008区间修改加欧拉降幂有两种操作:给区间[L,R]加上d 输入L,R,X,输出%X的值数据范围为:1 <= n, m <= 5000001 <= l <= r <= n1 <= D<= 2e91 <= X<= 2e...原创 2019-05-23 17:28:16 · 153 阅读 · 0 评论 -
ZOJ 2112(树套树)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1112静态的主席树用于记录静态的未修改的序列的贡献(板子)对于单点修改来说,修改id处的数字相当于将该棵主席树以及在此基础上的主席树都修改掉,那么单次修改的复杂度就会达到n*log(n),而这个操作就相当于区间修改吧,那么最适合做区间修改,单点查询的是什么...原创 2019-05-30 17:10:58 · 373 阅读 · 0 评论 -
J.ZBT的游戏
http://acm.nuc.edu.cn/OJ/contest/show/54/1009就是一个典型的区间染色问题,长度为n的区间,m次询问,每次修改区间[L,R]的颜色为v,或者查询呢区间内有多少不同的颜色。看题目只有256种颜色,64*4啊,4个long long状态压缩一下就好了,(哎,比赛时候没想到压缩一下啊)。修改区间[L,R]内的颜色的话,就是将区间置0,然后在指定的位置...原创 2019-05-13 15:17:30 · 168 阅读 · 0 评论 -
Distance on the tree (2019南昌网络赛)
主席树套LCA题目链接:https://nanti.jisuanke.com/t/38229、预处理出lca的一套东西,将查询区间[L,R]分成两半,[L,LCA(L,R)],[R,LCA(L,R)] 计算区间内小于等于k的个数即可主席树记录每一个子节点到初始节点间出现的所有线段长度的个数。主席树这种东西的话,,,百度学吧。。。我讲不清,我太菜了。。对于常见的主席树区间查询来说...原创 2019-05-09 21:58:58 · 205 阅读 · 0 评论 -
K-th Number POJ - 2104
主席树板子题。这是我做的第一道主席树的题。前置知识:线段树,权值线段树。别看了,我写的不好,看不懂的23333。对于这道题来说,将所有数离散化后,值域最大为n,修改为n次,每次更新都是单点更新。主席树是一个存着所有历史版本的线段树的一种数据结构(可持久化线段树),就对于这道题来说,每一颗线段树都存着值域上的信息。最开始新建一颗普通的权值线段树,然后按照序列顺序向里面添加数,...原创 2019-05-09 15:23:14 · 198 阅读 · 0 评论 -
SDUT-4259 (2018年西安邀请赛K题)
题目链接:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/4259.html每年有两种操作,一是询问[L,R]内的土地这些年来的总产量,二是为[L,R]内的每一块地的年产量加1。思路:假设X[i]表示一块土地第X[i]年增加年产量,则若询问年为y,总共更新了z次操作,那么这些年来的总产量为...原创 2019-04-30 08:37:32 · 347 阅读 · 0 评论