杂题

题意

给定一个随机排列\(p\)\(q\)次操作
\((1)\):给定\(k\),将序列重排列\(k\)次,一次重排列为:\(p'[p[i]]=p[i]\)
\((2)\):给定\(l,r\),求\(\sum\limits_{i=l}^r p[i]\)
\(n,q\le 10^5,k\le 10^9\)

做法

对操作\(2\)差分成前缀和

\(f(lim,k)\)为序列总共重排列了k次后\(\sum\limits_{i=1}^{lim} p[i]\)
\(lim\)分块,\([1,T],(T,2T],(2T,4T],\cdots\)
枚举块\([st,ed],\)对于查询\((lim,k)\),满足\(lim\in[st,ed]\),若在重排列\(k\)次意义下\(\sum\limits_{i=1}^{st-1}p[i]\)已知,则\([st,lim]\)的答案可以\(O(T)\)求出

考虑如何求出在\(k=1\sim n\)\(sum_k=\sum\limits_{i=1}^{st-1}p[i]\)
由于排列是随机的,置换中的环个数是\(O(logn)\)的,考虑分环处理
\(f_k\)\(k\)意义下,当前环\(\sum\limits_{i=1}^{st-1}p[i]\)\(f_k=\sum\limits_{i=1}^{len}p[x[i]]\times [i移动k次后\le st-1]\)
这个能写成卷积形式

复杂度\(O(qT+\frac{n}{T}nlogn)\),取\(T=\sqrt{nlogn}\)最优

posted @ 2020-06-16 17:12  Grice  阅读(61)  评论(0编辑  收藏  举报