随笔分类 -  算法->倍增

摘要:题解 ……………………………………………… 我莫不是一个智障吧 我把testdata的编号 当成数据组数读进来 我简直有毒 以为哪里写错了自闭了好久 实际上这题很简单,只要愉悦地开个启发式合并,然后每次暴力修改一个点的根缀主席树和倍增lca数组就行 复杂度$n \log^2 n$ 代码 阅读全文
posted @ 2019-01-13 21:57 sigongzi 阅读(225) 评论(0) 推荐(0)
摘要:题解 想出70的大众分之后就弃疗了,正解有点神仙 就是首先有个比较显然的结论,就是要么是一直往左走,要么是走一步右边,然后一直往左走 根据这个可以结合RMQ写个70分的暴力 我们就考虑,最优的话显然是走一步左边就到了目标点,第二步才开始有分叉 假如我们先走了一步左边,然后就变成了,从$L[x]$开始 阅读全文
posted @ 2018-12-15 10:08 sigongzi 阅读(318) 评论(0) 推荐(0)
摘要:题解 写后缀树真是一写就好久,然后调好久QAQ 我们把两个串取反拼一起建后缀树,这样的话使得后缀树是正串的后缀树 然后我们把询问挂在每个节点上,每次线段树合并,对于大于50的每次暴力跳着在线段树找,对于小于50的建出一棵树来,也就是$a[i][j]$表示第$i$位往后$j$位,向下一个$a[t][j 阅读全文
posted @ 2018-12-01 16:20 sigongzi 阅读(475) 评论(0) 推荐(0)
摘要:题解 我们冷静一下,先画一棵后缀树 然后发现我们要给c和d这一段区间在[a,b]这一段开头的串里找lcp 而lcp呢,就是c点的祖先的到根的一段,假如这个祖先的子树里有[a,b dis[u] + 1],那么这个u就是合法的,维护每个点子树里出现过的后缀串起点可以用线段树合并 (这里的深度指后缀树上该 阅读全文
posted @ 2018-08-20 16:25 sigongzi 阅读(165) 评论(0) 推荐(0)
摘要:题解 考虑朴素的暴力,相当于枚举u点的每个祖先f,然后统计一下这个点f除了某个儿子里有u的那个子树之外的节点个数,乘上f到u距离的二进制1的个数 那么我们用倍增来实现这个东西,每次枚举二进制的最高位j,用dfs序枚举点u,找到u的距离为$2^j$的祖先,那么在fa[u][j]这个祖先的位置,j这一位 阅读全文
posted @ 2018-06-19 15:05 sigongzi 阅读(192) 评论(1) 推荐(0)