线段树
小菜鸡加油
菜鸡
什么都能折磨
展开
-
D.Querying Multiset(思维/线段树)
题目大意维护使得满足以下三种操作:在一个空球上面写一个整数XX,并把这个球放入包内。 对于包内的所有球,将每个球上面的整数加上XX。 输出包中所有球上的最小的数字,并把这个球扔掉.法一:无脑线段树。把时间顺序看成修改的区间来处理#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<ma..原创 2021-08-09 15:16:35 · 128 阅读 · 0 评论 -
D - Welfare State(线段树)
https://codeforces.com/contest/1199/problem/D原创 2021-06-04 21:01:26 · 111 阅读 · 0 评论 -
E. Hanoi Factory(dp+单调性优化/dp+线段树)
https://codeforces.com/problemset/problem/777/E思路:推出O(n^2)的转移方程,然后优化。对于优化有两种,一种考虑到决策的单调性,可以利用优先队列或者单调栈 进行优化。另一种是用数据结构的方法来直接找符合要求的转移最值。先第一种。每次都要找最大值,考虑用堆来实现。但是有一个转移条件bi>aj。我们每次取堆头是都要判断一下这个转移是否合法,如果不合法就把堆顶弹掉。这样贪心对吗,会不会把对之后更新有影响的元素弹掉?考虑当前原创 2021-05-26 11:16:29 · 151 阅读 · 0 评论 -
C - Serge and Dining Room(思维+权值线段树)
https://codeforces.com/contest/1179/problem/C思路:思考x作为答案时候,条件是啥。就是大于等于x的商品个数 > 大于等于x的小朋友的钱的个数。那么对于这一单点点。维护好之后就是找后缀>0的最后位置。一个做法就是转化成维护前缀和区间修改。然后查区间最值来找到这个位置。插眼:cf393E#include<iostream>#include<vector>#include<queue>#原创 2021-04-28 22:40:00 · 161 阅读 · 0 评论 -
380C - Sereja and Brackets(思维+线段树)
https://codeforces.com/problemset/problem/380/C开始自己看错题..当看对题了后,在括号匹配的基础上打线段树,发现不是单纯的求区间和。参考:https://www.luogu.com.cn/blog/_post/287910#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath&g原创 2021-04-14 11:58:16 · 138 阅读 · 0 评论 -
D. Bash and a Tough Math Puzzle(思维+线段树+剪枝)
https://codeforces.com/problemset/problem/914/D思路:考虑如何快速判断gcd[l,r]%x是否可以修改一个数得出。如果答案满足,那么其必然是有一个不是x的倍数,或者都是x的倍数。因为最多只能将一个不是x的倍数改成x。或者将都是x的倍数其中一个改成最小的x就是了。如果这样其实还是暴力了。如果一段区间的gcd是x的倍数,说明这段区间就可以return了。如果不是,看这段区间的左儿子和右儿子,如果两个%x!=0,那么至少要cnt=2;不然就搜其中一个儿子,原创 2021-04-13 17:52:42 · 88 阅读 · 0 评论 -
557C - Arthur and Table(思维+权值线段树)
https://codeforces.com/problemset/problem/557/C思路:好久没搞权值线段树的相关操作了..都生疏了。首先考虑枚举当前的最大长度是哪个,然后把其后面的比他大的都去掉,这时候需要快速获得k个权值最小的和。这题的难点在这。由于权值<=200,所以可以预处理前缀去做。但是权值大一点呢。我们可以尝试权值线段树。其每个叶子节点对应的是权值大小,存一个节点的总和和数量。更新的时候找到对应的权值叶子节点加上或者减去。查找的时候对[1,200]的整个区原创 2021-04-11 17:21:49 · 135 阅读 · 0 评论 -
D - Restore Permutation(思维+线段树)
https://codeforces.com/contest/1208/problem/D思路:开始是想二分找位置尝试往连续的(1+x)*x/2去做,发现没有规律。考虑从 1 -> n 去构造答案,试想对于1来说,肯定是最后一个0的位置,然后我们可以让0后面的所有数字就减去1,这样继续找0最后的位置即可。删除当前的数(赋值为无穷大)然后对于找到的位置后面所有元素减少 i 。不断找最小值的位置#include<iostream>#include<vector原创 2021-04-10 00:07:53 · 154 阅读 · 0 评论 -
C. Perform Easily(思维+线段树)
https://codeforces.com/problemset/problem/1413/C#题意:给定数组a(长度为6)然后给定长度为n的数组b,然后把b[i]-a[1~6]中任意一个,使得处理后的b数组跨度(最大值减最小值)最小.思路:暴力n^2比较好想。枚举某个值作为最大值/最小值。这里以最大值为例。那么我再on*6去枚举每个数减去后不超过最大值的值,6个中取最大,在所有数中综合起来取最小值。那么怎么快速维护呢。把所有能出现值按从小到大排序。然后枚举某个值作为最大值,原创 2021-04-08 12:14:29 · 141 阅读 · 0 评论 -
L.Simone and graph coloring(思维+线段树)
https://ac.nowcoder.com/acm/contest/12548/L思路:比如5674324的答案就是之前比他的大的数,里面找一个,涂色编号最大的+1。找编号最大的可以把线段树的[l,r]变成维护值域,然后每次查比当前数字大的数的染色最大值。因为之前的染色最大值就是其一个联通块里最极限的情况,此时相连必然要再+1...原创 2021-04-03 16:37:44 · 175 阅读 · 0 评论 -
D. Multiset(思维+树状数组二分/权值线段树)
https://codeforces.com/problemset/problem/1354/D思路:找排名实际上就是看每个数前面的数出现的次数累加。如果用前缀和不得行。于是转化到值上去。开一个值域树状数组。对于一个排名,我二分里面的数,logn获得<=这个数的出现次数总和。单调性可以调整。O(n*logn*logn)当然权值线段树也行。O(nlogn)#include<iostream>#include<vector>#include<queu原创 2021-03-31 18:11:46 · 205 阅读 · 0 评论 -
C. Not Equal on a Segment(思维+区间找数字不同的下标)
https://codeforces.com/problemset/problem/622/C思路:开始想着离线莫队干过去。思维点的找特殊的最大值和最小值,如果两个一样说明数只有一个,必不可能,不然取其中一个就好。然后就上线段树#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map&g原创 2021-03-18 18:59:46 · 115 阅读 · 0 评论 -
问题 D: 阳光雨露(离散化+线段树/动态开点)
思路:1e9嘛..赛中没有动态开点的板子,手写调1小时多最后mle,麻了。第二天改了动态的写法,然后re。疯狂re。刚刚改出来re70分。先放离散化的写法吧。(真的方便很多..赛中为什么想不开阿)#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set原创 2021-03-15 15:29:01 · 113 阅读 · 0 评论 -
买礼物(链表+线段树)
链接:https://ac.nowcoder.com/acm/contest/9983/E来源:牛客网在卖礼物的超市中有n个柜子,每个柜子里都摆放了一个礼物,每个礼物有自己的一个编号,第i个柜子里的礼物编号为ai。茶山牛想给牛牛和牛妹买相同编号的礼物,但礼物有可能在某个时刻被其他人买走,而且柜子数量太多,因此茶山牛在某个时刻只想知道某一个柜子区间是否能买到两件相同编号的礼物。具体来说,有q次操作,格式如下:1x,第x个柜子里的礼物被买走,保证此时这个柜子里的礼物还在。2 l r,茶山牛询.原创 2021-02-12 14:14:21 · 172 阅读 · 0 评论 -
Codeforces 818D Multicolored Car(思维+线段树)
题意:现在有N辆车经过,A和B玩一个游戏,他们统计他们自己喜欢的颜色的车辆的个数。一开始对手已经选好了颜色A.我们现在要选择一个颜色,使得Cnti(chose)>=Cnti(A);这里Cnti()表示到位子i,该颜色出现的车辆个数。如果存在多解,输出任意一个可行解即可。思路:考虑当前数的贡献:如果当前数字是A,那么对其他所有数来说,都需要有一个数才能满足,否则这个数直接pass。因此可以出现A,让其他所有数都-1,如果此时是负数了,那就彻底gg。然后出现不是A.原创 2021-02-03 00:15:48 · 103 阅读 · 0 评论 -
D. Constant Palindrome Sum(贡献法+区间修改)
https://codeforces.com/problemset/problem/1343/D题目大意:给出 n 个数,保证 n 是偶数,且每个数的范围都在 [ 1 , k ] 之间,现在问我们至少需要给多少个数重新赋值,使得可以满足条件:所有的数的值域都在 [ 1 , k ] 之间 对于 i ∈ [ 1 , n/2 ] ,满足 a[ i ] + a[ n - i + 1 ] = x ,且所有的 x 都相等思路:算出对于每一个x,有多少对数可以一个都不替换,有多少可以只替换其中一个,有多少必.原创 2021-01-31 18:30:25 · 174 阅读 · 0 评论 -
P6098 [USACO19FEB]Cow Land G(LCA+线段树维护区间异或值)
https://www.luogu.com.cn/problem/P6098#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstdio>#include<algorithm>#define.原创 2020-11-21 13:08:19 · 136 阅读 · 0 评论 -
P4427 [BJOI2018]求和(LCA+前缀和)
https://www.luogu.com.cn/problem/P4427题目描述master 对树上的求和非常感兴趣。他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的kk次方和,而且每次的kk可能是不同的。此处节点深度的定义是这个节点到根的路径上的边数。他把这个问题交给了pupil,但pupil 并不会这么复杂的操作,你能帮他解决吗?输入格式第一行包含一个正整数nn,表示树的节点数。之后n-1n−1行每行两个空格隔开的正整数i, ji,j,表示树上的一...原创 2020-11-21 00:43:15 · 322 阅读 · 0 评论 -
P3128 [USACO15DEC]Max Flow P(树链剖分+线段树维护max)
https://www.luogu.com.cn/problem/P3128FJ给他的牛棚的N(2≤N≤50,000)个隔间之间安装了N-1根管道,隔间编号从1到N。所有隔间都被管道连通了。FJ有K(1≤K≤100,000)条运输牛奶的路线,第i条路线从隔间si运输到隔间ti。一条运输路线会给它的两个端点处的隔间以及中间途径的所有隔间带来一个单位的运输压力,你需要计算压力最大的隔间的压力是多少。思路:树链剖分后线段树操作维护区间最值,每次进行+1操作,打了tag的子树maxval+1,父亲.原创 2020-11-20 20:41:43 · 504 阅读 · 0 评论 -
P3038 [USACO11DEC]Grass Planting G(树链剖分边权转点权)
https://www.luogu.com.cn/problem/P3038给出一棵n个节点的树,有m个操作,操作为将一条路径上的边权加一或询问某条边的权值思路:边权转点权过程:参考罗老师如果把边权转为点权,就能按前面给出的“树链剖分 + 线段树”来解决。 例如下图(1),若把边权转为点权,显然只能把每条边上的边权赋给这条边下层的结点,得到图(2)。编程操作是:比较边(u, v)的两点的deep[u]、deep[v],把边权赋给更深的那个结点。图4 图(1)边权树原创 2020-11-20 19:44:46 · 300 阅读 · 0 评论 -
P3384 【模板】轻重链剖分(树链剖分建线段树维护板子)
https://www.luogu.com.cn/problem/P3384 内容参考罗老师的博客 重链,有重要特征:一条重链内部结点的DFS序是连续的。这个特征使得可以用数据结构(一般是线段树)来维护重链,从而高效率地解决一些树上的问题,例如以下问题: (1)修改点x到点y的路径上各点的权值。 (2)查询点x到点y的路径上结点权值之和。 (3)修改点x子树上各点的权值。 (4)查询点x子树上所有结点的权值之和。 其中的(1)是“树上差分”问题.树上差...原创 2020-11-20 18:32:58 · 415 阅读 · 0 评论 -
约会安排HDU - 4553(线段树区间合并+优先级+最长连续1)
原题目中输出语句中夹杂有中文,我已修改 寒假来了,又到了小明和女神们约会的季节。 小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会。与此同时,也有很多基友找他开黑,由于数量实在过于巨大,怎么安排时间便成了小明的一大心事。 我们已知小明一共有T的空闲时间,期间会有很多女神或者基友来找小明。 作为一个操作系统曾经怒考71分的大神,小明想到了一个算法,即“首次适应算法”,根据操作系统课本的描述,就是找一段最靠前的符合要求的连续空间分原创 2020-11-19 21:00:40 · 144 阅读 · 0 评论 -
E. Greedy Shopping(思维+线段树维护区间最值)
https://codeforces.com/contest/1440/problem/E题意:有n个商店, 去第i个商店购买物品需要花费a[i]元. 其中保证a序列为非增序列两种操作:① 1 x y 将[1, x] 区间的a[i]设置为 a[i] = max(a[i], y);② 2 x y 你有y元钱, 从编号为x的商店出发, 依次遍历所有商店直至到n号商店为止, 如果能购买当前商店的物品则购买. 问你能买多少物品思路:其实比较明显的线段树,需要一点点思维。开始往线段树上二分,确实可以但原创 2020-11-19 20:33:27 · 164 阅读 · 0 评论 -
最优的连续子段(思维+线段树模拟)
题意:给定一个长度为n的序列,需要找出一段最优的连续子段,使得出现在子段中出现次数为1次的数字最多(多一次少一次都不行,只要一次)。求最优连续子段中出现次数为1次的数字个数。首先要注意的是题目很可能读假了,什么意思呢?比如 1 2 1,我们是可以选择pos[1,3]这个区间的,只不过答案是2,也就是我们可以选择很长一段区间,里面可以有重复数字,最优解可以出现在里面,所以开始辛格的双指针是错了的。考虑的方式从新进来的一个数的贡献算起,这个数将对前面同样出现的last[i]+1~i这个区间整体有一个原创 2020-11-14 09:18:49 · 235 阅读 · 0 评论 -
P6492 [COCI2010-2011#6] STEP(区间合并维护区间连续01串)
https://www.luogu.com.cn/problem/P6492思路:类比维护连续的1.模板#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstdio>#include<algorith原创 2020-11-12 19:52:57 · 235 阅读 · 0 评论 -
Hotel(线段树区间合并-维护最长连续的1)
https://www.luogu.com.cn/problem/P2894火山经营着一个停车场,假设的停车场有N车位(编号1-N)都在一条线上,最初所有车位都没停车。经常有人来定车位,他要定连续的k(1 ≤ k ≤ N)个车位。火山要确定是否能够满足客人的要求,如果能,他要将这k个连续的车位安排在编号最小的地方停下。若不能,则客人不停在火山的停车场。在某一时间,有些车会被车主开走了。火山的停车场很大,火山想让学弟学妹写个程序帮助他。Input第1行输入N 和 M。N是车位个..原创 2020-11-12 18:13:41 · 238 阅读 · 1 评论 -
C2 - Pokémon Army (hard version)(思维+差分/线段树+dp)详解
https://codeforces.com/contest/1420/problem/C2这道题十分的锻炼思维,也让我知道了同样是差分,从前面减后面和从后面减前面是有不同的意义的。还记得c1吗?我们是找波峰波谷的,实际上这个波峰波谷如果用差分的想法去找,可以做出c2的题。什么意思?波峰波谷的差值一定是中间值之差的和,那么波峰波谷就是看成了能不能做差做下去。比如1254367,从前往后差分是 -1,-3,1,2,-3,-1,7.会发现这样一个事情。把正数的差分全部加上去,就是最后...原创 2020-09-27 00:10:44 · 362 阅读 · 1 评论 -
P3373 【模板】线段树 2
#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<cstdio>#include<algorithm>using namespace std;const int maxn=1e5+10;typedef long long LL;struct SegmengTree{ LL.原创 2020-09-17 08:56:08 · 89 阅读 · 0 评论 -
B. Interesting Array(线段树)
https://codeforces.com/problemset/problem/482/B题目描述We'll call an array ofnnnon-negative integersa\[1\],a\[2\],...,a\[n\]interesting, if it meetsmmconstraints. Theii-th of themmconstraints consists of three integersl_{i}li,r_{i}ri,q_{i}...原创 2020-09-03 09:16:31 · 273 阅读 · 0 评论 -
P5490 【模板】扫描线
关于理解扫描线的几个不错的博客:https://www.luogu.com.cn/blog/paperghost/ls-xue-xi-bi-ji-note37-sao-miao-xian-line-sweep-algorithmhttps://blog.csdn.net/sslz_fsy/article/details/82902644板子:#include<iostream>#include<vector>#include<queue>#incl原创 2020-08-30 18:47:52 · 249 阅读 · 0 评论 -
P1198 [JSOI2008]最大数
https://www.luogu.com.cn/problem/P1198题目描述现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。语法:Q L功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:LL不超过当前数列的长度。(L > 0)(L>0)2、 插入操作。语法:An功能:将nn加上tt,其中tt是最近一次查询操作的答案(如果还未执行过查询操作,则t=0t=0),并将所得结果对一个固定的常数DD取模,将所得答案插入到数列的末.原创 2020-07-26 19:57:41 · 365 阅读 · 0 评论 -
P1531 I HATE IT
https://www.luogu.com.cn/problem/P1531题目背景很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。题目描述不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩输入格式第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。学生ID编号分别从1编到N原创 2020-07-15 10:50:31 · 205 阅读 · 0 评论 -
P1083 借教室
https://www.luogu.com.cn/problem/P1083题目描述在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。面对海量租借教室的信息,我们自然希望编程解决这个问题。我们需要处理接下来nn天的借教室信息,其中第ii天学校有r_iri个教室可供租借。共有mm份订单,每份订单用三个正整数描述,分别为d_j,s_j,t_jdj,sj,tj,表示某租借者需要从第s_原创 2020-07-12 10:50:27 · 297 阅读 · 0 评论 -
SP1716 GSS3 - Can you answer these queries III[区间最大子段和]详解
题目描述https://www.luogu.com.cn/problem/SP1716You are given a sequence A of N (N <= 50000) integers between -10000 and 10000. On this sequence you have to apply M (M <= 50000) operations:modify the i-th element in the sequence or for given x y prin原创 2020-07-09 19:28:00 · 277 阅读 · 0 评论 -
线段树理解
参考资料:《进阶指南》线段树是一种基于分治思想的二叉树结构,用于在区间上进行信息统计。线段树每一个节点代表一个区间 线段树具有唯一的一个根节点,代表的区间是整个统计范围,[1,N] 线段树的叶节点都代表一个长度为1的元区间[x,x] 对于每个内部节点[l,r],左节点是[l,mid],右节点是[mid+1,r],其中mid=(l+r)/2;根节点编号为1,编号为x的节点的左节点为x*2,右节点为x*2+1;当我们用Struct来存线段树时,数据要开四倍,证明如下:如上图,不是一颗原创 2020-07-08 23:12:05 · 148 阅读 · 0 评论 -
P3372 【模板】线段树 1
题目描述如题,已知一个数列,你需要进行下面两种操作:将某区间每一个数加上kk。 求出某区间每一个数的和。输入格式第一行包含两个整数n, mn,m,分别表示该数列数字的个数和操作的总个数。第二行包含nn个用空格分隔的整数,其中第ii个数字表示数列第ii项的初始值。接下来mm行每行包含33或44个整数,表示一个操作,具体如下:1x y k:将区间[x, y][x,y]内每个数加上kk。 2x y:输出区间[x, y][x,y]内每个数的和。...原创 2020-07-08 21:57:23 · 134 阅读 · 0 评论 -
线段树染色问题(例题为poj2777)
染色问题加离散化是poj2528,过后我会放出来的关于离散的详细解释参考博客:https://blog.csdn.net/iwts_24/article/details/81603603区域染色覆盖问题 假设某大学有一面文化墙,各个学院都可以在上面涂色,要求涂色区域高必须和墙一样,宽度任意但必须是整数(以米为单位)。涂色可以覆盖其他学院的涂色。现在若干个学院涂色之后最终这...原创 2020-01-29 21:51:56 · 571 阅读 · 0 评论 -
E - Just a Hook HDU - 1698 (区间修改点的值)
E - Just a HookHDU - 1698 In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. The hook is made up of several consecutive metallic sticks which are of...原创 2020-01-28 18:01:06 · 132 阅读 · 0 评论 -
A Simple Problem with Integers POJ - 3468(区间修改)
https://vjudge.net/problem/POJ-3468注意点:该改longlong的一定要改,数组要开3倍左右,字符读入建议%s字符数组You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add so...原创 2020-01-28 11:21:04 · 133 阅读 · 0 评论 -
B - I Hate It HDU - 1754 (RE//MLE原因)
https://vjudge.net/problem/HDU-1754这题可以说是非常的hate了,在这里我终于发现我模板上把l打成1了...于是疯狂RE,现在都修改了已经Ac了.这题的容易RE的点//MLE:统一读字符的时候scanf(" %c%d%d", &ch, &x, &y);(%c前面有空格的,作用应该类似getchar)单个%c的话注意getch...原创 2020-01-28 11:18:18 · 311 阅读 · 0 评论