
线段树
文章平均质量分 52
stargazer.
夜を穿つの
展开
-
【BZOJ #1568】 [JSOI2008]Blue Mary开公司(李超树)
传送门李超树板子具体是利用两个线段最多只有一个交点的性质对于每个区间维护最优线段并标记持久化具体实现可以看代码复杂度小常数O(nlog2n)O(nlog^2n)O(nlog2n)#include<bits/stdc++.h>using namespace std;#define ll long long#define bg begin#define pii pair...原创 2020-04-14 22:09:20 · 174 阅读 · 0 评论 -
【UOJ #88】【集训队互测2015】Robot(线段树分治 / 斜率优化 / 李超树)
传送门对于函数fi=kix+bif_i=k_ix+b_ifi=kix+bi求最大或最小显然是李超树板子考虑对时间线段树分治一下然后再在线段树内求最大最小值把值列出来发现是一个斜率优化的式子分别对最大/小值维护上/下凸壳即可注意对于最小值,第一个点显然就是在−∞-\infty−∞处最小的所以按斜率优化中的横坐标从大到小即从右往左做考虑建凸包时要先排序可以先最开始的时候排一次...原创 2020-04-14 22:00:20 · 377 阅读 · 0 评论 -
【UR #19】前进四(吉司机线段树)
传送门直接用线段树维护单调栈可以85pts85pts85pts考虑离线后从后往前扫维护以时间为下标维护后缀minminmin的线段树每个位置的修改就是对于一段区间找到所有大于xxx的改成xxx并答案+1+1+1直接吉司机线段树复杂度是O(nlogn)O(nlogn)O(nlogn)的具体做法是记录区间最大值和次大值如果mx>x>semx>x>semx>...原创 2020-04-09 00:24:02 · 635 阅读 · 0 评论 -
【LOJ #3273】「JOISC 2020 Day1」扫除(线段树分治 / 线段树)
传送门考虑对于所有被扫除过的点有若xi≤xj,则yi≥yjx_i\le x_j,则y_i\geq y_jxi≤xj,则yi≥yj即所有灰尘位置是单调的先考虑没有插入的情况对于一次修改,有可能其中一部分地方被之前的一次操作修改过而因此现在这一块没有灰尘,这一块就是这次修改影响不到的地方、考虑用权值线段树维护每个位置可以修改得到的地方比如如果之前有一次l=l0l=l_0l=l...原创 2020-03-30 20:05:37 · 620 阅读 · 0 评论 -
【洛谷 P6144】【USACO20FEB】 Help Yourself P(二项式定理 / 线段树)
传送门设f[i][k]f[i][k]f[i][k]表示iii为最右点时所有情况的kkk次方考虑按左端点排序后一个个加入假设当前加入l,rl,rl,r对于f[1,l−1],f[1,l-1],f[1,l−1],会从xk→(x+1)kx^k\rightarrow (x+1)^kxk→(x+1)k二项式定理展开加到f[r]f[r]f[r]即可对于f[l,r−1]f[l,r-1]f[l,r−1]...原创 2020-03-11 19:17:54 · 364 阅读 · 0 评论 -
【LOJ #6062】「2017 山东一轮集训 Day2」Pair(霍尔定理+线段树)
传送门霍尔定理就是对于二分图的完美匹配一定有一边的任意一个子集SSS向另一边的相连的集合大小>=∣S∣>=|S|>=∣S∣于是把BBB排序后连的一定是一个后缀用线段树维护每个点及以后连了多少条边那么必须满足vi−i>=0v_i-i>=0vi−i>=0线段树维护即可#include<bits/stdc++.h>using name...原创 2020-02-07 19:28:51 · 342 阅读 · 0 评论 -
【洛谷 P3772】[CTSC2017]游戏(矩阵乘法+线段树)
传送门洛谷题解区牛逼啊一个贴的cz_ xuyixuancz \_ \ xuyixuancz_ xuyixuan的,一个贴的DZYODZYODZYO的为了发题解连亲妈都不要了吗?首先显然考虑每个位置赢的概率问题在于一个位置输赢的概率不只要考虑前面的还要考虑造成下一个胜负确定位置的影响参考给出的贝叶斯公式P(xi=1∣xr,xl)=P(xl,xr∣xi)P(xi...原创 2019-12-18 22:04:15 · 242 阅读 · 0 评论 -
【LOJ #2346】「JOI 2016 Final」断层(线段树)
传送门把坐标(x,y)→(x−y,x+y)(x,y)\rightarrow(x-y,x+y)(x,y)→(x−y,x+y)后发现就是往下和右移2l2l2l长度对于x,yx,yx,y分别维护一颗线段树线段树上二分开始移的位置区间加即可#include<bits/stdc++.h>using namespace std;#define re register#define ...原创 2019-11-02 17:14:11 · 264 阅读 · 0 评论 -
【LOJ#2019】【AHOI / HNOI2017】—影魔(线段树+扫描线)
传送门发现只用考虑每个值作为最大的时候即可发现贡献可以看做平面上点和线段扫描线即可#include<bits/stdc++.h>using namespace std;#define re register#define ll long long#define pb push_back#define cs const#define bg begin#define ...原创 2019-10-29 18:59:14 · 139 阅读 · 0 评论 -
【LOJ#2018】【AHOI / HNOI2017】—单旋(Set+线段树)
传送门观察到只有旋转最大最小这样对树形态几乎没有变化线段树维护深度即可#include<bits/stdc++.h>using namespace std;#define re register#define ll long long#define pb push_back#define cs const#define bg begin#define pii pa...原创 2019-10-29 18:57:08 · 189 阅读 · 0 评论 -
【Codeforces 793 G】—Oleg and chess(线段树优化建图+最大流)
传送门一个很显然的扫描线用线段树维护一下就完了#include<bits/stdc++.h>using namespace std;const int RLEN=1<<20|1;inline char gc(){ static char ibuf[RLEN],*ib,*ob; (ob==ib)&&(ob=(ib=ibuf)+fre...原创 2019-10-07 16:53:33 · 224 阅读 · 1 评论 -
【洛谷 P5305】【GXOI/GZOI2019】—旧词(树链剖分)
传送门用类似LcaLcaLca那道题的做法做但这里是depkdep^kdepk把一个点系数设为depk−(dep−1)kdep^k-(dep-1)^kdepk−(dep−1)k即可#include<bits/stdc++.h>using namespace std;const int RLEN=1<<20|1;inline char gc(){ sta...原创 2019-09-20 13:01:45 · 182 阅读 · 0 评论 -
【UOJ #284】— 快乐游戏鸡(长链剖分+线段树)
传送门可以发现我们大致是要维护一个每个深度的最大值之类的东西考虑离线下来对每个点处理所有子树内的询问设f[i][j]f[i][j]f[i][j]表示点iii子树深度为jjj以内的最大值是多少那么f[i][j]−f[i][j−1]f[i][j]-f[i][j-1]f[i][j]−f[i][j−1]就是深度jjj走的次数那么对于一个询问(s,t)(s,t)(s,t)答案就是∑i=1d=de...原创 2019-09-17 18:16:12 · 512 阅读 · 0 评论 -
【CSP-S 2019模拟】T1 —看门人(长链剖分+线段树)
传送门签到水题长剖维护一下,每次在链顶把链底向上一个个合并轻儿子用一颗线段树维护单点修改和区间询问即可考试的时候看错题了…以为只找向下一条路径还写了个线段树合并对拍了2h2h2h我是个瓜皮#include<bits/stdc++.h>using namespace std;const int RLEN=1<<22|5;inline char gc()...原创 2019-09-11 21:37:34 · 258 阅读 · 0 评论 -
【Codeforces 643G】—Choosing Ads(线段树)
传送门考虑O(n)O(n)O(n)求区间绝对众数的方法维护当前值vvv和次数kkk如果当前这个值̸=v,k−−\not =v,k--̸=v,k−−否则k++k++k++如果k<0,v=a[i]k<0,v=a[i]k<0,v=a[i]这样保证最后得到的一定是出现次数>n/2>n/2>n/2的出现次数>n...原创 2019-09-10 21:40:33 · 377 阅读 · 0 评论 -
【Codeforces 1172F】—Nauuo and Bug(线段树+双指针)
传送门一个位置的时候f(x)={x+v(x<p−v)x+v−p otherwisef(x)=\begin{cases} x+v(x<p-v)\\ x+v-p \ \ otherwise\end{cases}f(x)={x+v(x<p−v)x+v−p otherwise这时候是一个分段一次函数对于x,...原创 2019-09-10 19:18:35 · 275 阅读 · 0 评论 -
【Codeforces #453 E】—Little Pony and Lord Tirek(线段树/均摊分析)
传送门考虑如果每次都是全局修改就很简单按照到达上限的时间排序则前面一段满了,后面一段都没满每次二分即可第一次特殊处理每次修改一个区间考虑维护该区间是否上一次完全修改、不完全修改、没有修改过如果是完全修改则直接计算答案,否则递归子树同样特殊处理每个节点的第一次完全修改这样复杂度是均摊O(nlog2n)O(nlog^2n)O(nlog2n)的#include<bits/st...原创 2019-09-10 15:45:14 · 209 阅读 · 0 评论 -
【BZOJ4538】【HNOI2016】—网络(树链剖分+可删堆)
传送门题意:给定一棵树,支持添加一条路径,删除一条路径,询问不经过某一点的路径中的最大值考虑到删除和询问最大值普通线段树很难维护考虑把线段树上每个节点设成一个可删堆就可以方便的维护删除和最大值了由于询问“不经过某一点”的最大值,我们修改就对于整棵树关于这条路径的补集修改由于路径的区间是O(logn)O(logn)O(logn)个,那么补集也是有O(logn)O(logn)O(logn)...原创 2019-02-21 12:38:48 · 211 阅读 · 0 评论 -
【BZOJ5249】【九省联考2018】—IIIDX(线段树)
传送门题意:给你一座森林和一堆权值,要把每个权值分配给点,要保证儿子不小于父亲的权值,问字典序最大的方案开始第一眼以为是傻逼题,结果交上去果断挂掉因为在有权值相同的情况,比如说n=4,k=2,d=1,1,1,2n=4,k= 2,d=1,1,1,2n=4,k=2,d=1,1,1,2,答案是1,1,1,21,1,1,21,1,1,2,实际上则是1,1,2,11,1,2,11,1,2,1发现每个...原创 2019-02-26 08:46:50 · 159 阅读 · 0 评论 -
【BZOJ5469】【FJOI2018】—领导集团问题(线段树合并)
传送门显然有个O(n2)dp:f[i][j]O(n^2)dp:f[i][j]O(n2)dp:f[i][j]表示以iii为根的树,最小值为jjj的结点个数则f[i][j]=∑v=son[i]Max(f[v][jf[i][j]=\sum_{v=son[i]}Max(f[v][jf[i][j]=∑v=son[i]Max(f[v][j~n])n])n])发现瓶颈主要在儿子信息的合并上然后我们发现...原创 2019-02-26 14:42:38 · 432 阅读 · 0 评论 -
【BZOJ2957】—楼房重建(线段树维护单调序列)
传送门发现如果左边比右边最高的高的话左边肯定右边的就没用了然后就是一个单调栈用线段树维护一下就可以了具体可以看代码#include<bits/stdc++.h>using namespace std;#define ll long longinline int read(){ char ch=getchar(); int res=0,f=1; w...原创 2019-03-02 16:54:41 · 344 阅读 · 0 评论 -
【BZOJ5343】【CTSC2018】混合果汁(整体二分)
传送门似乎主席树更简单?将果汁权值排序后线段树维护一下前缀和可以先加一个美味度−1-1−1,费用000,无限多的果汁还有线段树可以记一个now表示记录了哪些,这样就不用每次暴力更改了#include<bits/stdc++.h>using namespace std;#define ll long long#define int long longinline int...原创 2019-03-02 17:01:59 · 417 阅读 · 0 评论 -
【BJOI2018】【BZOJ2591】—链上二次求和(线段树维护二次函数)
传送门开始还是挺好想的,就是求前缀和的前缀和令SSS表示前缀和,则ans=∑k=lr∑i=kn(Sk−Si−k)ans=\sum_{k=l}^{r}\sum_{i=k}^n(S_k-S_{i-k})ans=k=l∑ri=k∑n(Sk−Si−k)=∑k=lr(∑i=knSi−∑i=0n−kSi)=\sum_{k=l}^{r}(\sum_{i=k}^{n}S_i-\sum_{i=0}^...原创 2019-03-06 14:57:57 · 264 阅读 · 0 评论 -
【LOJ#3043】【洛谷P5280】【ZJOI2019】—线段树(计数dp+线段树)
LOJ传送门洛谷传送门早上在知乎看到吉司机说这是一道期望+数据结构一脸懵逼原来就是把计数看成期望乘上情况分析一波复制操作就可以发现其实就是求每次操作有///没有的2t2^t2t种情况的tagtagtag之和如果按照线段树这个样子似乎……可以直接用线段树维护?维护一个tr[u]tr[u]tr[u]表示线段树上点uuu当前有多少种情况为111没有影响到的点显然tagtagtag是...原创 2019-04-06 15:41:00 · 247 阅读 · 0 评论 -
【BZOJ1396】—识别子串(后缀自动机+线段树)
传送门显然只出现一次的节点就是SamSamSam的failfailfail树的叶子节点考虑对于一个叶子节点uuu和父亲vvv对于i∈[len[u]−len[v]]i\in[len[u]-len[v]]i∈[len[u]−len[v]],答案可能是len[v]+1len[v]+1len[v]+1对于i∈[1,len[u]−len[v]−1],答案可能是len[u]−i+1i\in[1,le...原创 2019-07-15 18:01:04 · 173 阅读 · 0 评论 -
【NOIp训练】—子串查找VII(AC自动机+树链剖分+线段树)
传送门题意:给定nnn个点的树,树上每个节点存有一个字符串sss和权值vvv有mmm次询问每次给定一个字符串SSS和树上一条路径询问每个节点的s在S中出现次数×vs在S中出现次数\times vs在S中出现次数×v之和支持修改点的权值n,m≤2e5,∑∣S∣,∣s∣≤4e5n,m\le2e5,\sum|S|,|s|\le 4e5n,m≤2e5,∑∣S∣,∣s∣≤4e5结果数据水的...原创 2019-08-24 14:55:03 · 226 阅读 · 3 评论 -
【CodeChef COT5】—Count on a Treap(线段树维护单调栈)
传送门原创 2019-08-30 21:21:57 · 253 阅读 · 0 评论 -
【BJOI2019 Day2】简要题解
感觉2天难度不在一个档次上。。。。T1:传送门很普及−-−离散化O(n3)O(n^3)O(n3)背包即可#include<bits/stdc++.h>using namespace std;const int RLEN=1<<20|1;inline char gc(){ static char ibuf[RLEN],*ib,*ob; (ob=...原创 2019-09-05 14:39:19 · 251 阅读 · 0 评论 -
【Codeforces 377D】—Developing Game(线段树+扫描线)
传送门考虑对于一种方案最后一定存在2个数L,RL,RL,R满足L∈[max(li),min(vi)],R∈[max(vi),min(ri)]L\in[max(l_i),min(v_i)],R\in[max(v_i),min(r_i)]L∈[max(li),min(vi)],R∈[max(vi),min(ri)]换个角度如果把L,RL,RL,R看做一个二维的点那么就是找一个L,RL...原创 2019-09-09 21:59:28 · 234 阅读 · 0 评论 -
【Codeforces 480E】—Parking Lot(线段树+单调队列)
传送门由于有修改,考虑用线段树来做由于是求正方形维护l[i][j],r[i][j]l[i][j],r[i][j]l[i][j],r[i][j]表示向左右分别能延伸的最大长度每一次可以用单调队列维护一下左右最大的l,rl,rl,r每次和当前双指针的长度比较就可以的到线段树上一个点的答案了具体实现可以看代码复杂度O(nklogn)O(nklogn)O(nklogn)#include&l...原创 2019-09-09 22:03:55 · 217 阅读 · 0 评论