杂题
题意
给定一个随机排列\(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}\)最优