线段树
给我一瓶AC钙
是一颗萌菜没错了
展开
-
(CodeForces) F - Rectangles Gym - 101982F (线段树+扫描线)
题意:给出n个矩形的位置,问重叠奇数个矩形的面积之和解:求面积并的时候是只要线段被覆盖的次数大于0,那就是算进去的,而这个只要奇数覆盖,所以只要异或就可以了,只有奇数次覆盖的线段,我们才考虑了。(把扫描线的知识都忘了,那时候也没学好学习扫描线#include<bits/stdc++.h>#define il inline#define pb push_back#de...原创 2019-10-16 21:12:00 · 336 阅读 · 0 评论 -
(CodeForces) J - Shopping Gym - 101201J (线段树+取模)
题意:每次给你v ,l,r,让你将v逐个对区间l~r的数取模,求最后结果。解:对于一个数取模,那只有模数小于等于它取模才有意义,要不然取模的结果还是它本身,所以我们取区间中第一个小于等于该数的,并从他的位置向后继续找,因为取模每次下降一半,然后找区间小于该数最先出现的线段树即可。#include<bits/stdc++.h>using namespace std;type...原创 2019-10-15 22:26:02 · 191 阅读 · 0 评论 -
(2019杭电多校3) Distribution of books (dp+离散化+线段树)
传送门题意:n个数,可以选择前m(m自定)个数分成k块,问每块的数字和的最大值最小是多少解:首先我们可以二分这个最小的最大值mid,然后去check,我们可以定义dp[i],前i本书在满足<=mid的情况下最多可以分成几块,那么当sum[i]<=mid的情况下,dp[i]=1,反之0;更新的话dp[i]=max(dp[i],dp[i]+1) (当sum[i]-sum[j]<...原创 2019-09-17 15:44:24 · 275 阅读 · 0 评论 -
(CodeForces) D. Water Tree (树链剖分+线段树)
传送门将一棵子树覆盖为1,将一点到根路径上的点覆盖为0,询问一个点是1还是0;用树链剖分+线段树维护即可。#include<bits/stdc++.h>#define il inline#define pb push_back#define ms(_data,v) memset(_data,v,sizeof(_data))#define SZ(a) int((a)...原创 2019-09-10 18:31:59 · 265 阅读 · 0 评论 -
(2019南昌网络赛) C. Hello 2019 (矩阵建模+线段树维护)
传送门这是一道CF原题,思路在这线段树维护的时候,只要从右到左维护,不就变成了只能有2019不能有2018了吗,(关键是我也不会正着考虑呀T T#include<bits/stdc++.h>#define il inline#define pb push_back#define ms(_data,v) memset(_data,v,sizeof(_data))#...原创 2019-09-09 20:34:28 · 452 阅读 · 0 评论 -
(2019徐州网络赛) B. so easy (线段树 || 并查集)
传送门题意:就是两种操作,1:使得x点无效,2:查找大于等于x的最小有效点解:由于数据达到1e9不好set,所以就线段树操作就像了,节点维护区间,和存在的有效点数,然后查询的时候,用存在的有效点数剪枝一下即可。(好像有暴力过的???#include<bits/stdc++.h>#define il inline#define pb push_back#define ...原创 2019-09-07 18:57:14 · 455 阅读 · 0 评论 -
(Luguo) P3401 洛谷树 (树链剖分+线段树)
传送门解:首先异或也是具有前缀性质的,b[i]代表从i点异或到根节点的值,那么i到j的异或和就是b[i]^b[j],但是题目求得是i~j路径上所以子路径的异或和,显然是不能一个一个的求,思路也很巧妙,我们将这条路径上所有的b[]拿出来,对每一位进行维护,看看这些数在这一位上有多少1,和0,那么这一位对结果的贡献不就是(1<<i)*num1*num0吗;还有修改,首先修改影响的肯定是...原创 2019-09-07 10:37:08 · 348 阅读 · 0 评论 -
李超树入门
就是用线段树去维护线段。就不写详解了可以看传送门这篇博客。#include<bits/stdc++.h>#define il inline#define pb push_back#define ms(_data,v) memset(_data,v,sizeof(_data))#define SZ(a) int((a).size())using namespace s...原创 2019-09-02 20:19:24 · 169 阅读 · 0 评论 -
(CCPC) 网络赛 1002 array (线段树剪枝)
传送门题意:给你一个序列,每次查询【1,r】>=k 最小的没有出现的ai值。解:就是一颗权值线段树,同时节点用ls维护他代表区间所有值出现位置的最大值,没有出现(或修改)都置成无穷大,查询的时候,走左右儿子根据k来,满足条件优先进入左儿子,但是要判断一下ls(lson)是否>r,如果小于r,那说明所有值都在小于r的区间出现了,就没必要进入。然后递归到叶子节点,出现的位置>r,那就说明...原创 2019-08-24 12:40:29 · 243 阅读 · 0 评论 -
(Nowcoder) E.Explorer (线段树+可撤销并查集)
传送门题意:给出一个无向图,每条边有一个size区间[l,r],代表可以通过人的大小,求可以从1到n,人的大小的方案数。解:可以lct做,可是我还没学过lct。线段树+并查集的做法,我们先离散化size,使得线段树的节点代表size的一段区间,全部左开右闭(这样好处理)。然后我们将符合节点的边加进去,不需要下放。最后我们一遍深搜,深搜的同时将该节点的边,用并查集维护点之间的联通性,搜到叶子...原创 2019-08-10 21:14:13 · 205 阅读 · 0 评论 -
(Nowcoder) E.Find the median (线段树)
传送门题意:给你n个区间,每次往你现有的数中加上l,l+1,.....,r-1,r这些数,求现在所有数的中位数解:区间的范围很大,我们肯定需要离散化,解法也很直观,肯定是线段树维护吗,就维护区间出现点的个数,这样我们query的时候就可以根据数量一直走到叶子节点,求出答案,所以我们每个叶子节点就是代表一段小区间了。这里算是一个小技巧吧,我们把所有的区间都看成是左开右闭的,这样叶子节点的区间...原创 2019-08-09 22:12:47 · 269 阅读 · 0 评论 -
(Nowcoder) B xor (线性基交 + 线段树维护)
传送门题意:给你n个集合,每个集合中都有不超过32个数,总共询问m次,每次询问区间 [L, R] 中的所有集合,是否都有一个异或和等于X的子集。思路:对于查询区间的集合求线性基的交,看看能不能表示出查询的v即可,但是其实只需要线段树直接查询即可,不必先将交求出来。如何求交 传送1传送2#include<bits/stdc++.h>#define il inlin...原创 2019-07-31 21:31:54 · 325 阅读 · 0 评论 -
(Nowcoder) C.sequence (线段树+单调队列)
传送门和南昌邀请赛的网路赛一模一样。线段树维护l~r的前缀和即可,但是要注意sum[0]的存在,建树时并没有将其考虑进去。#include<bits/stdc++.h>#define il inline#define pb push_back#define ms(_data,v) memset(_data,v,sizeof(_data))#define s...原创 2019-07-31 11:35:44 · 271 阅读 · 0 评论 -
(HDU) 6186 CS Course (线段树)
传送门题意:给你n个数,p次操作,每次一个x,除去Ax,然后求出这个序列的与,或,异或的值。解题思路:只要用线段树维护一个数的状态就行了,是否被抛弃,重写一下pushup。#include<bits/stdc++.h>#define il inline#define pb push_back#define fi first#define se second...原创 2019-05-17 20:59:13 · 120 阅读 · 0 评论 -
我的线段树是坨屎(线段树专题)
不了解线段树的可以从这个入门,写的超棒线段树基础模板:查询区间和和区间最值不要care我下面时而数组线段树时而结构体线段树。A.hdu 1166 敌兵布阵:线段树板子题,单点修改区间查询。#include<bits/stdc++.h>#define il inline#define pb push_back#define fi first#de...原创 2019-04-27 14:29:56 · 228 阅读 · 0 评论 -
(CodeForces) E1,E2. Array and Segments (Easy / Hard version) (线段树||差分)
视频讲解戳这里(感觉我讲的还没这写的清楚)传送门题目大意:n个数,可选的m次操作,一次操作区间[l,r],使得区间中的数全都减1,问你选那几个操作可以使得该数组的最大值-最小值最大。E1,E2的区别就是一个数据大一个数据小。解题思路:一开始是没有头绪的,这是让你选操作而不是让你操作,但是还是很容易联想到差分和线段树操作的。我们可以考虑一顿操作之后数组中必然会出现最大值和最小值,因为操作...原创 2019-01-25 12:32:19 · 289 阅读 · 0 评论