作为仓鼠世界中一位伟大的计算机科学家,小仓鼠非常热衷于发明新算法。最近,他发现了一个用于对排列进行排序的全新算法,他决定以自己主人的名字命名为“WK算法”。
WK算法可以从一个无序排列中(从1开始)提取任意一个首项为1,公差为k
以下是WK算法的具体流程:
创建一个空数组v,反复从前往后遍历原排列,用v
存储已经找到的答案。
记当前遍历到的值为pi,如果它满足以下任一条件,我们就把它插入到v
的最后:
(1)pi=1并且当前数组v是空的。
(2)pi=vlast+k,这里vlast是上一个被插入数组末端的值。
当vlast+k>n时,结束算法。
小仓鼠已经证明出了这个算法的时间复杂度是O(n*T),T是我们遍历整个数组的次数(如果有一次遍历没有遍历完整个数组的话,也记作遍历了一次)
比如说,如果p={4,2,1,3,7,5,6}并且k=1,那么T
就是4
。每次找到的元素分别是:{1},{2,3},{4,5,6},{7}.然后如果k=2,T=2,情况就变成了:{1,3,5},{7}
.
现在小仓鼠决定考一考你:他会给你一个从1到n
的排列p
和一系列询问:每次给定一个k
, .需要计算出在此时需要的遍历次数T。为了增大难度,小仓鼠还会在询问之间时不时地交换两个元素!
第一行会给出一个整数n, 表示排列的长度。n≤105![]()
接下来的一行当中总共会给出n
个以空格分隔的整数,保证这些数构成了一个1到n
的排列。
第三行会有一个整数m
------表示事件总数。m≤105![]()
对于接下来的m行,每一行会描述一个事件,它们的格式为以下两种形式之一:
1XY,这表示小仓鼠在此时交换了排列中的第X
个元素和第Y个元素。
2K, 这表示一次询问。你需要找出传入参数K
之后运行WK算法时总共需要遍历数组的次数T
。
对于每一次询问,你需要输出一个整数,表示这个询问的答案
7 4 2 1 3 7 5 6 4 2 1 2 2 1 5 6 2 2
4 2 1