
线段树
只有魔法才能对抗魔法
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
区间或+区间和
#include <bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 2e5 + 5;const int INF = 0x3f3f3f3f;const ll MOD = 1e9 + 7;struct node{ int w[20];//二进制 20 位 int lazy;}...原创 2019-10-31 21:19:06 · 773 阅读 · 0 评论 -
区间乘+区间加+区间和
https://loj.ac/problem/10129板子题板子注意的就是,标记下放时 乘标记和加标记有优先顺序,先更新乘标记,再更新加标记,乘标记会影响加标记。乘标记初始都为1;#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5+5;int n...原创 2019-10-31 20:42:59 · 463 阅读 · 0 评论 -
Codeforces 242E- XOR on Segment(线段树 区间异或+区间和)
https://codeforces.com/problemset/problem/242/E区间异或+区间和题意:初始序列,两个操作,一:问区间和,二:区间每个数异或X;题解:对每个结点建20棵树,维护每一个二进制位,维护每个区间的每一位有多少个1即可#include <bits/stdc++.h>#define ll long longusing namesp...原创 2019-10-31 20:39:42 · 322 阅读 · 0 评论 -
2017杭州CCPC J - Master of GCD(线段树)
题意:初始序列为1,两种操作,一种区间所有数 * 2, 一种是区间所有数 * 3 ,问最后所有数的最大公约数题解:区间乘+区间GCD肯定不对,因为有取模操作,对乘积结果取模再求GCD肯定不对了 然后就想到维护每个结点乘2的次数和乘3的次数,分别取最小值就好了 ,ans=*,x,y分别是区间最小2的个数和3的个数 线段树区间修改+最小值细节:快速幂...原创 2019-10-31 10:34:52 · 230 阅读 · 0 评论 -
Distance on the tree(树上主席树+LCA)
https://nanti.jisuanke.com/t/38229题意:求树上两点间的边权小于K的个数题意:LCA在dfs预处理的时候建主席树,利用前缀和(树上同样满足), 然后这样 int ans=query(1,n,root[llccaa],root[x],h)+query(1,n,root[llccaa],root[y],h);求出两点的LCA 就好了,就成树上主席树了 ...原创 2019-10-14 10:52:11 · 242 阅读 · 0 评论 -
牛客国庆2 C.Just h-index(主席树)
https://ac.nowcoder.com/acm/contest/1107/C题意:求最大的K,满足条件区间内大于K的个数也得大于等于K,题解:比赛时瞎搞,二分+主席树 按照大于K的个数是否满足条件去二分,主席树查个数 结束后看其他人代码,发现可以直接找第K大,在树上查询本来就是二分查找的,可以块一个二分的复杂度(注释部分代码)#include<b...原创 2019-10-03 09:58:13 · 149 阅读 · 0 评论 -
牛客49 D.筱玛爱线段树 (线段树区间修改+思维)
题意:有点难懂; 初始序列a[n],值都为0,有两个操作, 1.区间【l,r】内数++, 2.执行操作编号在[l,r]内的所有操作各一次,保证r小于当前操作的编号。m次操作结束后,你要告诉马爷A数组变成什么样子了。 意思就是说【l,r】区间(区间内的数此时为操作的编号)内的数即以前的操作编号的,按这些操作编号再操作一次。题解:建两颗线段树,一颗维...原创 2019-09-20 20:48:36 · 201 阅读 · 0 评论 -
2019icpc南京网络赛F. Greedy Sequence(线段树/主席树)
https://nanti.jisuanke.com/t/41303题意:就是构造字符串 ,给定一个序列(无重复,长度为n),现在让你构造n个序列问你这n个序列的长度,限制条件是这样的:第一个序列的开头是1,第二个序列的开头是2,依次类推,但是每个序列是单调递减的,并且每个序列往后扩必须满足这个已知数字在原序列位置的|posj-k|--|posj+k|的区间内找扩展的数,看样例理解吧。题解...原创 2019-09-10 21:18:47 · 285 阅读 · 0 评论 -
2019icpc徐州网络赛E.XKC's basketball team(权值线段树)
https://nanti.jisuanke.com/t/41387题意:给你一个n,m,n个人都有一个Wi权值,问你每个人的右面最远的一个Wj大于等于Wi+m的位置与这个人的位置中间有多少人(j>i,Wj>=Wi+m);题解:在每个 i 的右面找大于等于Wi+m的最远位置,用权值线段树倒着维护下标,查询一次,更新一次。偶对了,离散化。细节:1.倒着做,是因为正着一次全...原创 2019-09-09 21:11:49 · 205 阅读 · 0 评论 -
2019牛客暑期多校训练营(第七场)E.Find the median (动态中位数)(权值线段树+点代表区间)
题意:Q次操作,每次给你一个区间[l,r],区间内[l,r]的值都出现+1次,问你中位数是多少题解:点代表区间,找第K大,这道题我搞了好久,问了好多人才明白究竟是啥意思。 首先可以每次把【l,r】的 r+1, 按照【l,r+1】建树,好处多多,这样就可以让你的结点化为一个左臂右开的区间,并且这个区间可以都依附于左端点的这个节点,可以直接满足加减性, ...原创 2019-08-17 10:37:08 · 214 阅读 · 0 评论 -
2019牛客暑期多校训练营(第九场)H.Cutting Bamboos(二分答案+主席树)
题意:砍竹子,n个高度,Q次询问,每次给你{l,r,x,y},让你在区间【l,r】内砍Y次,问你第X次砍到了多少高度(h),每次砍了的总长度相等题解:由于可以算出第X次砍完后的,砍了的高度,所以可以通过二分答案来得到砍到了多少高度。 所以 第X次砍了的高(H)就是== 高于这个高度的所有竹子的高度和 (HSUM) -- 高与这个高度的所有竹子个数...原创 2019-08-16 21:14:06 · 390 阅读 · 0 评论 -
2019牛客暑期多校训练营(第七场)C Governing sand(权值线段树)
题意:砍树,目的让最高的树数量大于所有树的数量。,砍树有代价,求最小代价题解:对高度排序,枚举每个最高高度,第一部分肯定是删除大于枚举高度的的所有代价,第二步分就是在小于枚举高度所有树在删除足够的就可以了。所以用个数据结构,权值线段树找第K大,返回第K大时的花费就好了。细节:仔细读题,题中给的是每种树的高度对应树代价和树的数量,所以会有同种高度但是代价不同的的情况。第二点就是注意边更新边查...原创 2019-08-12 16:20:40 · 190 阅读 · 0 评论 -
codeforces 914D(线段树区间GCD)
题意:q次询问,每次两个操作,1.问你区间【l,r】内修改一个数字后,区间的gcd是否是X,2.单点修改区间【l,r】的值题解:线段树处理区间的gcd如果给定的区间【l,r】 在左子树,就在左子树找 否则在右子树找 在否则需要拆区间,这时再来个查询,查询拆区间后的左右子树的gcd是否能整除X,因为区间gcd一定是最小的内个数 如果拆区间后的左右子树一边能整除则继续往下搜 如果拆区间...原创 2019-08-19 11:39:11 · 379 阅读 · 0 评论 -
2019杭电暑期多校第四场H - K-th Closest Distance (二分+主席树)
以下均学习于这个老哥的博客https://blog.youkuaiyun.com/qq_41286356/article/details/97958401#commentsedit题意:给定你N个数字, Q次询问,l,r,p,k,问你在【L,R】区间内的离P第K近的数的距离,强制在线题解:观察发现可以二分距离,又因为主席树是可持久化的线段树,边更新边建树,最后直接询问即可。 每次查询【L,R】区间内【...原创 2019-08-08 19:52:43 · 165 阅读 · 0 评论 -
2019牛客暑期多校第四场C.sequence (单调栈+线段树(区间内最大/最小子段和))
https://ac.nowcoder.com/acm/contest/884/C----------------------------------------------------------------和南昌网络赛Max Answer一样,些许变化。这里讲了线段树具体求区间最小子段和https://blog.youkuaiyun.com/gml1999/article/details/89...原创 2019-07-27 20:18:26 · 135 阅读 · 0 评论 -
2019杭电暑期多校第三场G. Find the answer /HDU6609(权值线段树)
题意:给你一组数据,对于每个数a[i]求出最少删除 i 前面(1~i-1)多少个数使得当前位前缀和<=m前置技能:线段树,每个节点用来维护一段区间的最大值或总和等。 权值线段树:顾名思义就是每个节点用来表示一个区间的数出现的次数。 权值线段树可以用来求区间第K大等题解:显然两个优先队列每次去删最大瞎搞会超时O(n^2); 这时候得考虑怎么扫一遍,线性的就可以得出结果;...原创 2019-07-31 16:33:43 · 237 阅读 · 0 评论 -
2019南昌邀请赛重现F (找规律(异或)+线段树)
https://nanti.jisuanke.com/t/40258题意:就是个这F(l,r)=f(l,l)^f(l+1,r).......^f(r,r) ^f(l+1,r)^f(l+2,r)....^f(r,r) .......^f(r,r);然后告诉了a[1-n], f(l,r)=a[l]^.....^a[r];两个操作:1.求F...原创 2019-07-24 11:38:58 · 311 阅读 · 0 评论 -
(线段树)求区间最大连续子段和
https://www.acwing.com/problem/content/246/题解:某大佬的区间子段和的解释:https://blog.youkuaiyun.com/wu_tongtong/article/details/73385029线段树需要维护的是:[x,y]内的最大子段和 ms[x,y]的区间和 s[x,y]内的紧靠左端点的最大子段和 ls[x,y]内的紧靠右端点的最大子...原创 2019-04-30 19:45:28 · 1143 阅读 · 0 评论 -
Max answer (线段树加单调栈(区间最小子段和))
https://nanti.jisuanke.com/t/38228题意:求最大值:连续区间和*区间最小值 求最小值时用单调栈求该值左边第一个小的与右边第一个小的来枚举区间 又因为存在负数,所以求区间子段和时分两种情况: 1.该值为正数时 乘以区间即可; 预处理前缀和,最后查询O(1); 2.该值为负数时...原创 2019-04-29 20:39:30 · 367 阅读 · 0 评论