线段树合并
Mys_C_K
人生有许多道:曾经踏足的是道,即将踏往的也是道,那什么才是道呢?唯有脚下走的才是道。一切精神或者物质都归于虚无,然后从混沌中衍生出三万道。在悲喜间涉足一条无数前人经历过,且将有无数后人奔赴的道,无论是否已经或者将要到达彼岸,然后便不再回头或是左顾右盼,即使有些道繁盛至极,夜灯如昼,无数人一浪又一浪的涌去,造就了世人皆知的辉煌;即使有些道草木凋敝,荒草丛生,只等勇敢的开拓者斩开荆棘,创造一片天地;这些都无所关,无所在意,彼岸何如、来日何方甚至过往旧事都化作一缕云烟,飘渺碧霄,我自撷高山之月色,独随足落处往行。
展开
-
3473 字符串 - 后缀自动机 - 线段树合并
往上题解很多复杂度其实是和串总长有关的,如果给你一颗Trie就gg了。SAM上一个点的答案是其parent树中所有点的答案的并集的结论是不对的,因为有可能当前这个节点可以表示一条从根出发到某个点的路径,这条路径没有后继,但是一个节点对应的这样的路径显然不超过一个,因此其线段树初始化为相应区间即可,最后跑一边线段树合并即可,线段树合并的时候遇到一个满的区间就return掉。另,这个题求得是重复子串算...原创 2018-04-27 23:18:30 · 348 阅读 · 0 评论 -
小Q与内存 - 非旋Treap - 线段树合并
题目大意:你要维护内存分配,初始有一个空的内存池,编号从0到230−1230−12^{30}-1,每次形如: alloc k,表示申请k个单位内存,依次将目前空着的编号最小的k个单位内存(可以不连续)作为这一次申请的结果。 delete t,表示销毁第t次申请的内存,第t次申请的内存变为空。 query t k,表示询问第t次申请的内存里,编号第k小的编号是多少(k从0开始)。 期间还需要...原创 2018-09-12 19:03:23 · 208 阅读 · 0 评论 -
codeforcs 1063F. String Journey - dp -SAM - 主席树/线段树合并 - 子串定位 - 倍增
题目大意: 给你一个长为nnn的字符串SSS,求最大的kkk,使得能够找出kkk个不重叠的子串t1…tkt_1\dots t_kt1…tk,使得∀i∈[1,k),∣ti∣>∣ti+1∣\forall i\in[1,k),|t_i|>|t_{i+1}|∀i∈[1,k),∣ti∣>∣ti+1∣,并且ti+1t_{i+1}ti+1是tit_iti的子串。n≤...原创 2018-10-16 13:23:23 · 313 阅读 · 0 评论 -
[集训队作业2018]UOJ 418 三角形 - 线段树合并 - 堆 - 并查集
题目大意:给一棵树,每次可以选择拿走某个点的所有石子(放到手上),或者在任意一个满足其儿子节点都已经有石子的点xxx放恰好wxw_xwx个石子。对每个点xxx求恰好在这个位置放wxw_xwx个石子,一开始手上要有多少石子?n≤105n\le10^5n≤105。 题解: 考虑对每个子树怎么暴力求; 考虑将问题反过来,每次变为若一个点有石子,就在其儿子节点都放上石子,然后把这个点的石子取走。一开始...原创 2019-02-26 11:50:35 · 362 阅读 · 0 评论 -
Election Campaign - dp - 线段树合并
题目大意:有一颗树和m条链,每条链有个价值,你要选出若干两两点不相交的链使得选出来的链的价值之和最大。 题解:显然dp,然后发现要维护的东西可以用一个线段树合并维护。 #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) #define Rep(i,v) rep(i,0,(int)v.size()-1) ...原创 2019-03-19 15:49:22 · 277 阅读 · 0 评论