![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
11011b
你配不上自己的野心,也辜负了曾经历的苦难
展开
-
Codeforces 1217E Sum Queries?(思维+线段树)
题目链接:E. Sum Queries?题意:给定一个有n(1<=n<=2*10^5)个元素a(1<=a<=10^9)的数组,进行m(1<=n<=2*10^5)次操作,每次执行以下两种操作之一1.修改某个元素值,2.询问区间[l,r]内和最小的集合,使得集合数的和对应十进制每一位都能出现在集合中某个数对应位置上题解:这种格式一看就是线段树,但是看到操作2的询问第一时间就感觉很懵,但我们手动模拟几次就会发现规律,只要任何两个数有相同的某一位都不为0,那这种两原创 2022-04-05 13:05:04 · 465 阅读 · 0 评论 -
Codeforces 1093G Multidimensional Queries(线段树+状态压缩)
题目链接:Multidimensional Queries题意:一个k(1<=k<=5)维数组n(1≤n≤2⋅10^5)每维的元素a(-10^6<=a<=10^6),进行q(1≤q≤2⋅10^5)次操作,操作有以下两种类型1,修改数组中第x个元素2.求出[l,r]区间内曼哈顿距离最大的两点间的曼哈顿距离题解:我们可以发现,最终答案一定是两个元素的每一维分别有一个取正,一个取负最为最终答案,即答案中i,j的各维正负情况正好相反,并且k只有5维,于是我们可以用状态压缩表示原创 2022-03-31 18:39:31 · 680 阅读 · 0 评论 -
Codeforces 1062E Company(树上lca+线段树+dfs序)
题目链接:Company题意:给定一颗n(2<=n<=10^5)个节点的树,和q(2<=n<=10^5次询问,每次询问[l,r],输出从[l,r]删除一个节点后剩余节点的lca对应的节点深度最大的情况,输出删除的点和最大深度题解:观察样例的图我们可以发现,每次删除的节点一定是对应树dfs序最小或者最大的点,那么我们直判断一下删哪边后深度更大即可,但难点就在怎么快速获得区间内公共lca,我们可以用线段树维护区间内dfs序最大和最小的点,每次询问先求出[l,r]内dfs序列最大和原创 2022-03-29 20:12:05 · 894 阅读 · 0 评论 -
Codeforces 85D Sum of Medians(线段树)
题目链接:D. Sum of Medians题意:给定一个空数组,每次进行以下操作1.增加一个[1,10^9]内的数(该数保证不在数组中)2.删除一个[1,10^9]内的数(该数保证在数组中)3.求数组排序后数组内下标对5取余等于3的元素和题解:将下标离散化,我们可以用线段树维护区间内数的个数,以及下标对5取余后对应0-4的元素的和,每次询问时答案就是t[rt][1]=v;,修改也很简单,注意在合并部分,合并时,右区间内对5取余后的下标在合并后变为(左区间个数+i)%5,左区间内保持不变原创 2022-03-28 20:40:22 · 290 阅读 · 0 评论 -
Codeforces 438D The Child and Sequence(线段树)
题目链接The Child and Sequence题意:每次对一个数组进行三种操作1.求出区间[L,R]和并输出2.将区间[L,R]每个元素都对X取余3.将位置K上的数修改成X题解:一眼看出这必定和线段树有关系,但是取余又好像不能处理,我们发现操作3中是单点修改而不是区间修改,这很反常,思考是否可以暴力,我们可以发现a mod m<,那么就意味着一个点最多被有效取余logn次,而且操作3是单点修改,我们可以线段树维护区间最大值和区间和,每次判断下如果区间最大值小于取余的数,那么就原创 2022-03-24 15:54:35 · 434 阅读 · 0 评论 -
Codeforces 558E A Simple Task (计数排序+线段树)
题解参考自大佬Black__wing题目链接A Simple Task题意:给定一个字符串(只由小写字母组成),每次进行两种操作,将区间[l,r]升序或者降序排序,求q次操作后字符串结果。题解:我们可以利用计数排序思想(不懂也没关系,直接看下面),对每个字母建一颗线段树,维护每个字母在每个区间内出现次数,对于每次的操作,我们只需要先把[l,r]区间内每个字母出现次数先记录下来并清空其在该区间的出现次数,然后直接按字母大小从左往右依次填入区间(利用线段树将该字母对应区间都占满),这样就实现了区间.转载 2022-03-21 12:41:21 · 184 阅读 · 1 评论 -
Codeforces718C Sasha and Array题解(线段树+矩阵加速)
本苟蒻第一次写题解,有不对的地方希望大家能够指出。题意:给定n个元素,每次可以进行两种操作1.将[l,r]元素均增加x2.求f(x)代表斐波那契数列中第x个元素的值题解:看到区间修改首先想到线段树,对于第二个操作,我们可以考虑矩阵加速,对于线段树每个区间,我们维护一个矩阵,懒标记也用一个矩阵表示(实际上也可以用一个数维护幂次,但取余时会比较复杂),懒标记下沉时可以直接表示为矩阵乘法...原创 2022-03-17 00:20:30 · 798 阅读 · 1 评论