容易发现对于一个排列\(p\),其重置次数为\(\sum_{i=1}^n{[p_i<i]}\),因为如果\(p_i = i\)不用操作,\(p_i > i\)可以直接顺着带过去不用重置
原问题就变成了进行左右移动操作和反转操作,和查询\(\sum_{i=1}^n{[p_i<i]}\)
不妨定义\(res_i\)表示向右移动\(i\)位的答案,对于每一个\(p_i\),他对\(res\)产生贡献的是一段或两段区间+1,这个可以差分后前缀和维护出数组\(res_i\)
而如果有了反转操作我们只需要再维护出\(rres_i\)表示反转后向右移动\(i\)位的答案即可
最终复杂度\(O(n+q)\)
标签:res,sum,重置,CF1834F,反转,移动 From: https://www.cnblogs.com/fox-konata/p/17644459.html