
线段树合并
文章平均质量分 62
stargazer.
夜を穿つの
展开
-
【LOJ #3277】「JOISC 2020 Day3」星座 3(笛卡尔树 / DP / 线段树合并)
传送门显然按照aaa建出笛卡尔树设f[u][h]f[u][h]f[u][h]表示点uuu对应的[l,r][l,r][l,r]区间内所有星星最高的高度为hhh的最小答案考虑转移的时候合并左右儿子与自己的答案设当前点高度为hththt那么就是三部分只有其中一个存在高度≥ht\geq ht≥ht的点其余两部分只能在[0,ht][0,ht][0,ht]里选最小的fff线段树合并维护这个DPD...原创 2020-03-24 21:48:42 · 586 阅读 · 0 评论 -
【洛谷 P4384】 [八省联考2018]制胡窜(SAM / 线段树合并)
传送门首先建出SamSamSam,线段树合并维护endposendposendpos显然考虑endposendposendpos问题可以变成给定xxx条线段[li,ri][l_i,r_i][li,ri]选择两个点切下去,存在某条线段未被切开的方案首先转化成求所有线段都被切开的方案用C(n−1)2C^2_{(n-1)}C(n−1)2减去即可设L=r1,R=lxL=r_1,R=l_...原创 2020-02-13 22:52:41 · 222 阅读 · 0 评论 -
【Codeforces 700E】Cool Slogans(后缀自动机+线段树合并)
传送门首先满足条件的一定是failfailfail树上的一条链然后就是要求一个在另一个里出现了两次这个维护一下endposendposendpos集合就可以判断了从上往下递推找到最长的即可有些细节可以见代码对克隆节点的处理#include<bits/stdc++.h>using namespace std;#define cs const#define re regi...原创 2020-01-17 08:43:09 · 256 阅读 · 0 评论 -
【Codeforces 666 E】—Forensic Examination(广义Sam+线段树合并)
传送门考虑对所有串建出广义SamSamSam用线段树合并维护每个节点在哪些串中出现以及最大出现次数对于每个询问,先找到rrr匹配到的节点然后树上倍增找到s[l,r]s[l,r]s[l,r]对应的节点在线段树上查询即可要特判这个串没有匹配的情况#include<bits/stdc++.h>using namespace std;const int RLEN=1<&...原创 2019-10-08 14:01:18 · 195 阅读 · 0 评论 -
【BZOJ3413】—匹配(后缀自动机+线段树合并)
传送门相当于对每个询问串询问和一堆串的lcplcplcp考虑对询问串的每一位iii分别考虑会和多少个串匹配到这一位假设最后末尾在ppp匹配上那显然就是当前这一位对应的节点的endposendposendpos在[i,p+i−len][i,p+i-len][i,p+i−len]范围内如果一直没匹配上就是[i,n][i,n][i,n]内然后线段树合并维护endposendposendpos...原创 2019-09-26 22:08:38 · 291 阅读 · 0 评论 -
【BZOJ #4556】【Tjoi2016&Heoi2016】—字符串(后缀自动机+线段树合并)
传送门仍然和后缀数组做法一样考虑二分由于是公共前缀对反串建SamSamSam然后倍增找到C,C+midC,C+midC,C+mid对应的那个节点就相当于看endposendposendpos是否有在a,b−mid+1a,b-mid+1a,b−mid+1里线段树合并维护$endpos即可#include<bits/stdc++.h>using namespace std;...原创 2019-09-26 22:00:15 · 146 阅读 · 0 评论 -
【LOJ#2720】【NOI2018】—你的名字(后缀自动机+线段树合并)
传送门人菜常数大系列先考虑686868分的做法答案就是TTT的本质不同子串个数−-−TTT和SSS的公共子串对TTT建一个SamSamSam统计第一部分第二部分就只需要TTT在SSS上跑,维护一下当前最长匹配长度和判重就可以了考虑当l̸=rl\not= rl̸=r的时候我们就需要知道在某一个区间有没有出现当前匹配的串假设当前匹配长度为xxx,我们当前在SamSamSam匹配到p...原创 2019-07-18 15:36:22 · 200 阅读 · 0 评论 -
【BZOJ5461】 【PKUWC2018】—Minimax(线段树合并优化dp)
传送门发现其实就是左右2棵子树,左儿子选到某个值的概率就是选最大值的概率∗右儿子的值比它小的概率选最大值的概率*右儿子的值比它小的概率选最大值的概率∗右儿子的值比它小的概率+选最小值的概率∗右儿子的值比他大的概率+选最小值的概率*右儿子的值比他大的概率+选最小值的概率∗右儿子的值比他大的概率右儿子类似由于保证所有值都相等然后上线段树合并mergemergemerge的时候dpdpdp一...原创 2019-04-06 21:59:59 · 768 阅读 · 0 评论 -
【BZOJ4399】—膜法少女LJJ(线段树合并)
传送门坑比题面c≤7c\le 7c≤7考虑到3、43、43、4操作可行的只有平衡树或者权值线段树维护大力上线段树合并用并查集维护一下联通块至于权值积转成对数加就可以了#include<bits/stdc++.h>using namespace std;const int RLEN=1<<21|1;inline char gc(){ static char...原创 2019-04-10 16:58:30 · 232 阅读 · 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 评论