题意
给定一个随机排列(p),(q)次操作
((1)):给定(k),将序列重排列(k)次,一次重排列为:(p'[p[i]]=p[i])
((2)):给定(l,r),求(sumlimits_{i=l}^r p[i])
((n,qle 10^5,kle 10^9))
做法
对操作(2)差分成前缀和
令(f(lim,k))为序列总共重排列了k次后(sumlimits_{i=1}^{lim} p[i])
对(lim)分块,([1,T],(T,2T],(2T,4T],cdots)
枚举块([st,ed],)对于查询((lim,k)),满足(limin[st,ed]),若在重排列(k)次意义下(sumlimits_{i=1}^{st-1}p[i])已知,则([st,lim])的答案可以(O(T))求出
考虑如何求出在(k=1sim n),(sum_k=sumlimits_{i=1}^{st-1}p[i])
由于排列是随机的,置换中的环个数是(O(logn))的,考虑分环处理
令(f_k)为(k)意义下,当前环(sumlimits_{i=1}^{st-1}p[i]),(f_k=sumlimits_{i=1}^{len}p[x[i]] imes [i移动k次后le st-1])
这个能写成卷积形式
复杂度(O(qT+frac{n}{T}nlogn)),取(T=sqrt{nlogn})最优