摘要:
首先将排列和整个序列以及询问都反过来,问题变成给定一个位置$x$,问它经过若干轮置换后会到达哪个位置。 每次置换之后窗口都会往右滑动一个,因此其实真实置换是$p[i]-1$。 对于每个询问,求出轮数,倍增找到最终位置,注意当中途走到$0$时,说明离开了窗口,应及时终止。 时间复杂度$O((m+q)\ 阅读全文
摘要:
考虑容斥,枚举哪些串必然出现,那么贡献为$(-1)^{选中的串数}$。 设$f[i][j]$表示$i$的子树内,$i$点往上是$j$这个串的贡献之和,那么总状态数为$O(n+m)$,用map存储$f$。 将子树的DP值与父亲合并时,按串长分类讨论: 若子树串比较长,那么暴力枚举它的前缀状态转移即可。 阅读全文