线段树
romiqi_new
这个作者很懒,什么都没留下…
展开
-
191024省选测试题解
T1:有n个不相交矩形障碍,求从原点走到某个目标点的最短路,目标点在x轴上显然矩形的右端点是没用的,我们保留左边即可显然不会往左走,dp一下是n2n^2n2的,用扫描线优化一下即可#include<bits/stdc++.h>#define pb push_back#define ll long long using namespace std;inline int re...原创 2019-10-24 16:29:35 · 188 阅读 · 0 评论 -
191012CSP-J模拟题解
T2算答案加成了矩阵的一行然后调了我2个小时T1:求图的仅在一个简单环中的边显然点双Code:#include<bits/stdc++.h>#define pb push_back#define fi first#define se secondusing namespace std;inline int read(){ int res=0,f=1;char ch...原创 2019-10-12 13:51:04 · 1346 阅读 · 0 评论 -
191007CSP-S模拟题解
博主来口胡联赛组巨佬们的考试题辣T1:给一个序列,保证只有两个数出现了奇数次,求出这两个数数据范围只允许O(n)O(n)O(n)显然考虑出现奇数次的数字和出现偶数次的有什么不同,当然是全部异或起来后出现偶数次的全没了所以先全部异或起来得到两个所求数的异或值,这个异或值某一位为1表示某个数这一位为1而另一个数这一位为0,那就把这一位为1的数再全部异或一遍就完了Code:太傻逼不想写T2:...原创 2019-10-11 20:13:46 · 392 阅读 · 0 评论 -
191005CSP模拟题解
T1:对于每条边,求删了这条边原图能否成为二分图,点边规模2e6解法:首先判掉无奇环和一个奇环的情况一条边合法当且仅当其属于所有奇环的交集且不属于任何一个偶环(会构成新的奇环)那就弄个dfs树,对于每条返祖边树上差分一下,奇环+1偶环-1,最后看差分值是否为奇环个数即可Code:#include<bits/stdc++.h>using namespace std;inli...原创 2019-10-05 17:16:26 · 181 阅读 · 0 评论 -
[LOJ2197][线段树][凸包][三分]SDOI2014:向量集
LOJ2197和UOJ191unknown类似我们知道点积等于一个向量的长度乘以另一个向量在这个向量上的投影的长度那么如果我们把范围限制在180°内,则这个函数是单峰的,那就可以线段树维护上下凸壳,查找的时候三分但是直接维护会T飞,因为需要合并,复杂度很高换一种方法,我们是从左到右依次加入的,那就意味着如果我们要查询线段树的一个节点的话,那这个节点对应的区间一定被填满了,所以我们可以在填...原创 2019-09-29 23:28:19 · 176 阅读 · 0 评论 -
[BZOJ4540][线段树][单调栈]HNOI2016:序列
BZOJ4540不想写了,看这个下传的时候要推一下合并的式子,类似矩阵乘法Code:#include<bits/stdc++.h>#define ll long longusing namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(ch)) {if(ch==...原创 2019-09-11 22:00:59 · 135 阅读 · 0 评论 -
[校内模拟][长链剖分][线段树]看门人
题意:求一棵树上每个点的子树中经过这个点的所有路径中边数在给定范围内的最长路径早上8:05开考,8:10分看完题就秒了然而有个地方没有开longlong而且线段树维护长链的方向反了所以连部分分都没了裸的长链剖分,需要用线段树维护区间最大值,最好是zkw线段树(偷懒不想写)Code:#include<bits/stdc++.h>#define mod 998244353...原创 2019-09-11 16:12:37 · 157 阅读 · 0 评论 -
[CF1172F][线段树][双指针]Nauuo and Bug
CF1172F我们对于一个区间设一个函数f(x)f(x)f(x)表示xxx经过区间[l,r][l,r][l,r]之后的值,那么很容易发现f(x)f(x)f(x)的一些性质:是分段函数每段斜率为1相邻两段的截距差为p每段的横向长度为p(除了开头和结尾两段)一个区间的的段数不超过区间的长度(最多是mod小于所有值时每个值对应一段,不会再多了)根据性质1,2,我们用vector维护每一...原创 2019-09-05 19:08:20 · 301 阅读 · 0 评论 -
[CF1083D][线段树][单调栈]The Fair Nut's getting crazy
CF1083D按照套路,我们从左往右枚举交区间的r,并计算方案数设L[i],R[i]为i前面/后面第一个与它相同的位置,pos为最小的满足[pos,i]中没有重复数的位置,则以r为交区间的右端点的方案数为∑i=posr(mn{R[i]}−r)(i−mx{L[i]})\sum_{i=pos}^r(mn\{R[i]\}-r)(i-mx\{L[i]\})∑i=posr(mn{R[i]}−r)(i−...原创 2019-09-04 21:59:03 · 249 阅读 · 0 评论 -
[CF997E][线段树][单调栈]Good Subsegments
CF997E可以发现,一个区间是好的当且仅当max−min−(r−l)=0max-min-(r-l)=0max−min−(r−l)=0,所以可以离线维护max−min−(r−l)max-min-(r-l)max−min−(r−l)的最小值和最小值个数,每次往后移动都会使最小值(r−l)+1(r-l)+1(r−l)+1,并且maxmaxmax和minminmin会改变,这里用两个单调栈维护max和...原创 2019-09-04 12:49:10 · 390 阅读 · 0 评论 -
[CF377D][线段树][扫描线]Developing Game
CF377D把l,rl,rl,r看成两维坐标,假设最后有解,那一定存在一个(L,R)(L,R)(L,R)使得L≥max{l[i]},L≤min{v[i]}L\ge max\{l[i]\},L\le min\{v[i]\}L≥max{l[i]},L≤min{v[i]}且R≥max{v[i]},R≤min{r[i]}R\ge max\{v[i]\},R\le min\{r[i]\}R≥max{v[i...原创 2019-09-03 21:54:08 · 619 阅读 · 0 评论 -
[BZOJ3693][线段树][Hall定理]圆桌会议
BZOJ3693就是要判断有没有完美匹配,用Hall定理可知对于任意l[i],r[j]l[i],r[j]l[i],r[j],若某一个l[k],r[k]l[k],r[k]l[k],r[k]被其包含,则对应的a[k]a[k]a[k]之和需要小于等于r[j]−l[i]+1r[j]-l[i]+1r[j]−l[i]+1(其实用脑子想也想的出来)如果不是环的话我们将操作按rrr排序,把lll离散化,从左到...原创 2019-08-30 18:42:02 · 211 阅读 · 0 评论 -
[线段树合并][动态图]魔法少女LJJ
BZOJ4399第3.4个操作直接上权值线段树第1.2个操作线段树合并第5个操作在权值线段树上二分第7个操作并查集做第8.9个操作可以用字符串模拟快速读入防止超时第6个操作显然会炸,所以用对数比较,log(m∗n)=log(m)+log(n)log(m*n)=log(m)+log(n)log(m∗n)=log(m)+log(n)Code:#include<bits/stdc+...原创 2019-01-20 17:10:02 · 211 阅读 · 0 评论 -
[51nod1766][线段树][树的直径]树上的最远点对
51nod1766可以发现,如果把两个区间分别求一个直径,记录一下端点,那么最优解一定是这四个端点中的任意两个构成的,且这两个点不能来自同一个区间,用直径的性质很好证明然后我们就可以用一个线段树维护一下下标区间的直径的端点然后,本题卡常,要用rmq-lca才能过Code:#include<bits/stdc++.h>#define ls tr[k].l#define rs...原创 2019-03-18 18:37:59 · 140 阅读 · 0 评论 -
[二分][线段树][TJOI / HEOI2016]排序
BZOJ4552分析:我们先二分答案,然后把所有大于等于mid 的值设为1,小于mid的值设为0,用线段树做log次01排序最后根据q位置上的值调整l和r即可Code:#include<bits/stdc++.h>#define ls tr[k].l#define rs tr[k].r#define mid ((ls+rs)>>1)using namespa...原创 2019-01-27 11:24:45 · 140 阅读 · 0 评论 -
[BZOJ5249][线段树]九省联测:IIIDX
BZOJ5249很容易发现关系可以形成一个树形结构,一个点的子树中的点权都要比它大则我们给一个点赋值的时候要给它的siz那么多点预留一些点,我们维护f[i]表示i点还可选的点个数,则每次都用线段树维护一下就行了要容斥一下,如果这个点的father有点权了就要减去这个点的信息Code:#include<bits/stdc++.h>#define ls tr[k].l#def...原创 2019-02-25 22:06:35 · 83 阅读 · 0 评论 -
[树剖][线段树+堆][HNOI]网络
听说可以整体二分?BZOJ4538树剖,然后用线段树维护线段树的每个节点是两个堆,一个维护当前值,一个维护删除值Code:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(ch)) {if(ch=='...原创 2019-01-19 15:25:07 · 113 阅读 · 0 评论 -
[BZOJ5291][线段树]BJOI2018:链上二次求和
BZOJ5291一看就知道要维护一堆前缀和推了一会发现还有前缀和的前缀和sumsumsum为前缀和,ssumssumssum表示前缀和的前缀和要求∑i=lr∑j=insum(j)−sum(j−i)\sum_{i=l}^r{\sum_{j=i}^{n}}{sum(j)-sum(j-i)}i=l∑rj=i∑nsum(j)−sum(j−i)=∑i=lr(ssum(n)−ssum(i−1)−...原创 2019-03-06 09:13:24 · 206 阅读 · 0 评论 -
[线段树]区间and or xor
描述 请你维护一个线段树支持一下操作A x l r 区间 and xO x l r区间 Or xX x l r 区间 Xor xS l r 区间求和输入 一个数 T表示数据组数 一个数n表示初始序列长 m表示查询 随后n个整数 接下来m次询问 如上输出 S次询问的答案样例输入14 11 2 4 7S 0 2样例输出7提示为防止min-max剪枝 n=1e6 m=...原创 2018-11-01 16:50:58 · 1027 阅读 · 3 评论