线段树
Freopen
这个作者很懒,什么都没留下…
展开
-
ZKW线段树区间加区间取最值
本来以为是和zkw单点修改之类的简单技巧,但是今天卡常的时候学习了一下发现有点离谱。树状数组的区间加区间求和是利用差分和一次前缀和来完成的,但是写在线段树上就不用差分了。但是可以差分,并且zkw线段树提供了一种线段树式的差分方法:对于每个点,只存一个标记trxtr_xtrx,表示maxfax−maxx\max_{fa_x} - \max_{x}maxfax−maxx,也就是线段树上一个节点和他父亲区间最大值的差分,我们现在可以知道一个线段树上一个整区间的最大值就是他到根的和。那么我们求区原创 2020-08-09 21:25:10 · 1167 阅读 · 0 评论 -
sort(区间异或,区间排序,区间或,区间与,Trie树合并,Treap)
看标题就知道是大工业题四种操作(标题前四个短语)求最后的序列。n≤1e5,v≤232n \leq 1e5 , v \leq 2^{32}n≤1e5,v≤232考虑只有排序:发现有序的一段可以直接用一个01trie01trie01trie树来存储,trietrietrie树上字典序从小到大的值就是这一段从左到右的值。那么区间排序[l,r][l,r][l,r]时就相当于把这个区间[l,r][l,r][l,r]的所有数字放到一个trietrietrie树T1T_1T1里面,用一个三元组[l,r,T1原创 2020-07-25 17:58:57 · 707 阅读 · 0 评论 -
CF 938 G Shortest Path Queries(线性基,线段树分治)
题目太模板了,没啥好说的#include<bits/stdc++.h>#define maxn 800005#define pii pair<int,int>#define mp make_pair#define rep(i,j,k) for(int i=(j),LIM=(k);i<=LIM;i++)#define per(i,j,k) for(int i=(j),LIM=(k);i>=LIM;i--)using namespace std;char原创 2020-05-30 16:58:49 · 219 阅读 · 0 评论 -
JOISC 2020 Day4 治疗计划(Dijkstra,线段树)
题目中文特制新冠题面,信息曲线救国石、锤、了JOI国医疗水平天下第一,可以同时救治109个新冠患者题解:考虑从左往右DPDPDP,fif_ifi代表[1,Ri][1,R_i][1,Ri]的人已经被救治(RiR_iRi代表第iii个计划的右端点),那么fi−>fjf_i ->f_jfi−>fj的时候需要保证i,ji,ji,j之间不会出现空档,也就是Ri−Lj+1≥∣Ti−Tj∣R_i-L_j + 1\geq |T_i-T_j|Ri−Lj+1≥∣Ti−Tj∣。然后原创 2020-05-19 16:16:42 · 536 阅读 · 0 评论 -
ROI2017 学习轨迹(转化,线段树,单调栈,性质挖掘)
题目AC Code\mathcal AC \ CodeAC Code#include<bits/stdc++.h>#define maxn 500005#define LL long long#define lc u<<1#define rc lc|1#define inf 1e17using namespace std;int ...原创 2020-04-29 11:52:34 · 321 阅读 · 0 评论 -
UOJ #164. 【清华集训2015】V
题目(居然)比想象中好写多了操作:区间赋值,区间加,区间减,区间和000取maxmaxmax,单点询问,单点求历史最大值。此题所有的修改都可以用一个标记表达:(a,b)(a,b)(a,b)表示将xxx变为max(a+x,b)max(a+x,b)max(a+x,b)那么标记的合并可以发现(a,b)∗(c,d)=(a+c,max(b+c,d))(a,b)*(c,d)=(a+c,max(b+...原创 2020-01-21 19:51:29 · 314 阅读 · 0 评论 -
LOJ #6034. 「雅礼集训 2017 Day2」线段游戏(李超线段树)
题目主席树套李超树。一开始以为空间是O(nlog2n)O(n\log^2n)O(nlog2n)的。然后发现这个神奇的数据结构(李超树)是O(n)O(n)O(n)空间的。。。。注意不要往李超树里面加斜率不存在的线段,好像处理不了的样子,在外面简单维护即可。时间复杂度O(nlog2n)O(n\log ^2n)O(nlog2n)AC Code\mathrm {AC \ Code...原创 2019-12-26 20:33:47 · 288 阅读 · 0 评论 -
和箭头一起游走(主席树+倍增)
n,m,q<=1e5,T<=1e15n,m,q<=1e5,T<=1e15n,m,q<=1e5,T<=1e15题目保证箭头不会相交。一道不卡精度的计算几何发现一个箭头上的人只会走到另一个确定的箭头上或走出去,那么我们可以把这个走的关系建成图。求出每一步的距离后即可分三类简单讨论得到终点坐标。对于T<=1e15T<=1e15T<=1e...原创 2019-12-17 20:49:08 · 134 阅读 · 0 评论 -
BZOJ 3681 Arietta(可持久化线段树合并优化建边|网络流)
题目尽管是一道板题但是还是很难的。中途输出了一下结果,4e54e54e5的点1e61e61e6的边。。。SAPSAPSAP在一条链的时候TTT了,换成DinicDinicDinic就过了。。。应该是DinicDinicDinic比SAPSAPSAP更能创造奇迹。AC Code:\rm AC \ Code:AC Code:#include<bits/stdc++...原创 2019-12-10 20:57:23 · 178 阅读 · 0 评论 -
God knows(李超线段树\CDQ分治)
n<=2e5n<=2e5n<=2e5设fif_ifi为删除(i,pi)(i,p_i)(i,pi)的线段并使得不存在线段(a,b),a<i,b<pi(a,b),a<i,b<p_i(a,b),a<i,b<pi的最少花费。那么容易发现可以转移到fif_ifi的fjf_jfj一定满足pjp_jpj是k=i−1,i−2....jk=i-1...原创 2019-10-31 16:20:40 · 305 阅读 · 0 评论 -
LOJ #510. 「LibreOJ NOI Round #1」北校门外的回忆(倍增+动态开点线段树)
题目这个题是一个精彩的分析性质区间离散的问题真的详细维护链真的一绝。LOJ\rm LOJLOJ最短AC Code\rm AC \ CodeAC Code#include<bits/stdc++.h>#define maxn 200005#define lim 30using namespace std;int n,q,K,f[lim][maxn]...原创 2019-10-24 23:02:37 · 310 阅读 · 0 评论 -
LOJ #3163. 「CEOI2019」动态直径(欧拉序+线段树)
重点在于实现。#3163. 「CEOI2019」动态直径#include<bits/stdc++.h>#define maxn 200005#define pii pair<int,int>#define mp make_pair#define lc u<<1#define rc u<<1|1#define LL long long...原创 2019-10-24 13:51:06 · 641 阅读 · 0 评论 -
[HNOI2016]网络O(n\log n)解法(提高组知识点:线段树上二分+树上两条路径交)
题目题解: 对于每个询问二分答案M,那么转为判断权值大于等于M的路径的交是否包含该点。建立权值线段树,区间[L,R][L,R][L,R]维护权值在[L,R][L,R][L,R]范围内的线段的交,可以O(1)合并左右子树的答案。那么二分答案的过程可以改为线段树上二分的过程,O(logn)O(\log n)O(logn)插入和删除在没有权值相等的情况下就是简单的把某一个位置赋值或者清零然后向...原创 2019-10-03 16:02:08 · 202 阅读 · 3 评论 -
[CQOI2015]任务查询系统
这个主席树也太裸了吧。操作是两倍所以蜜汁RE#include<cstdio>#include<cstring>#include<cctype>#include<algorithm>#include<vector>#define LL long long#define maxn 100005#define maxnum 100...原创 2018-04-07 15:03:30 · 191 阅读 · 0 评论 -
ARC 063 F
在w * h 的方格中 求不含指定格点的边与方格平行的长方形的最大周长 考虑内部没有任何格点(不管是否指定)的长方形 发现周长最大为min(w , h) * 2 + 2 所以长方形一定穿过横着的中线和竖着的中线的其中一条。 考虑穿过一条线的长方形如何计算? dp[i][j]代表以横坐标为i为右边界,横坐标j为左边界的最大周长, 会发现dp值和i,j,还有i与j之间纵坐标最靠近这条线的...原创 2018-08-03 09:17:00 · 337 阅读 · 0 评论 -
「CodePlus 2018 3 月赛」寻找车位
access_globe 有一个巨大的停车场,这个停车场有 nn 行,每行有 mm 个车位。为了美观,access_globe 在建立这个停车场时,规定这个停车场必须是长条形的,即 n\ge mn≥m。每个车位都是一个正方形的区域。最近,access_globe 正在为抽不到 Missing Poster 而苦恼,因此他请你帮他维护这个停车场。你需要支持两个个事件:一辆车停到某一个车位中,或...原创 2019-01-03 19:40:46 · 416 阅读 · 0 评论 -
Codeforces 1093 G. Multidimensional Queries
求动态k维曼哈顿最大距离。这个很板。线段树这个东西和FFT,FWT之类的一样,找位置反倒是最耗时间的,所以要把32维压起来一起下放上传。。。。跑的飞快AC Code:#include&lt;algorithm&gt;#include&lt;cctype&gt;#include&lt;cstring&gt;#define maxn 800005#define inf 0x3f3f3f3.原创 2018-12-24 21:14:10 · 239 阅读 · 0 评论 -
LOJ #2116. 「HNOI2015」开店(树链剖分+标记永久化主席树 || 动态点分治)
题目解法一:∑i∈[1,n] and x[i]∈[l,r]dis(u,i)=∑idep[u]+dep[i]−2∗dep[lca(u,i)]\sum_{i\in [1,n] \ and \ x[i]\in[l,r]} dis(u,i) = \sum_{i}dep[u]+dep[i]-2*dep[lca(u,i)]i∈[1,n] and x[i]∈[l,r]...原创 2019-03-20 08:48:10 · 204 阅读 · 0 评论 -
BZOJ 3514: Codechef MARCH14 GERALD07加强版(LCT+主席树)
题目一个直观的想法:如果题目保证随时是一颗树就好了。那么答案就 = n - (R - L + 1)一个合理的联想:我可不可以通过对边的统计得到答案?如果我们把[L,R][L,R][L,R]中的边拿出来做克鲁斯卡尔,边权为边编号。那么一条边联通两个联通块,使联通块数量减小,当且仅当它是第一条连接这两个联通块的。像:区间查询颜色种类,每个颜色第一次出现才会有贡献。那么我们求出来每条边uu...原创 2019-03-20 15:54:59 · 141 阅读 · 0 评论 -
51nod 2014 小朋友的笑话(势能分析线段树)
小O是一个很萌很萌的女孩子。有一天小O叫了很多很多萌萌哒小朋友到家里来玩。由于太无聊了,她们开始讲笑话。总共有N个小朋友排成一排,编号1~N。在某个时刻,会有编号为xi的小朋友看到了笑话li,然后她会把这个笑话讲出来,与她距离不超过ki的小朋友都会听到这个笑话。当一个小朋友听到一个笑话时,如果她是第一次听得到这个笑话,那么她会觉得这个笑话非常好笑,笑的停不下来。如果她听到之前就是在笑的她...原创 2019-03-24 19:24:16 · 625 阅读 · 0 评论 -
BZOJ 3551: [ONTAK2010]Peaks加强版(可持久化线段树合并)
题目求出克鲁斯卡尔树然后在子树内在线求第k大。用主席树。发现父亲的主席树是由两个子树的主席树合并而来。可以写可持久化线段树合并。感觉除了不回收儿子节点以外没啥区别。用了一次fwrite,不好用。一次不用fread,TLE到死。#include<bits/stdc++.h>#define maxn 200005#define maxpt maxn*30#define...原创 2019-03-21 16:07:01 · 204 阅读 · 0 评论 -
BZOJ 4771: 七彩树 树链的并,可持久化线段树
题目⾸先不管深度限制,我们只考虑如何统计⼦树内本质不同的种类数。维护链并即可。对于每⼀种灵魂,我们使⽤⼀个 维护其在树上的 序。那么插⼊⼀个点时,我们对应修改链并即可。修改⽅法为:在该点l+1,在其与前趋、后继的 lca处-1,在前趋、后继的lca 处+1。那么此时求某个点⼦树内本质不同的种类数就变成了求⼦树的权值和,线段树维护即可。有了深度限制怎么办?我们将点按照深度排序,然后按...原创 2019-09-09 22:26:23 · 179 阅读 · 0 评论 -
BZOJ 3251: 树上三角形
题目题解:这是一个判定性问题。>47>47>47个点就必定有解。可以通过较小两边之和<=第三边来证明。然后就暴力往上跳存下来暴力判断就行了。树剖AC Code:#include<bits/stdc++.h>#define maxn 400005#define pb push_back#define lc u<<1#...原创 2019-09-14 16:24:46 · 153 阅读 · 0 评论 -
BZOJ 4552: [Tjoi2016&Heoi2016]排序
Description在2016年,佳媛姐姐喜欢上了数字序列。因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他。这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行m次局部排序,排序分为两种:1:(0,l,r)表示将区间[l,r]的数字升序排序2:(1,l,r)表示将区间[l,r]的数字降序排序最后询问第q位置上的数字。Input输入数据的第一行为两...原创 2018-03-13 12:08:21 · 215 阅读 · 0 评论