循环位移
题目描述
小七给奶龙一个长度为 n 的数组 a0,a1,⋯,an−1, (0≤ai<p),奶龙不喜欢数组死气沉沉的样子,于是他决定进行 m 次操作让数组动起来。每次操作有两种形式:
- 
把当前的数组向右循环位移 x 位,即 a(i+x)modn:=ai
 
- 
令 ai=(ai+x)modp(p 事先给定)。
 
充满好奇心的奶龙想要知道每次操作后整个数组的逆序对数,你能帮帮他吗?
输入格式
第一行包含两个正整数 n,m,p,分别为数组大小和操作次数,以及事先给定的参数 p。
第二行包含 n 个整数,依次为 a0,a1,⋯,an。
接下来 m 行,每行包含两个整数 o,x(o∈{0,1},0≤x<p) 描述一次操作。若 o 为 0 表示这是第一种操作,否则为第二种操作。
输出格式
共 m 行,每行一个整数表示当前数组的逆序对数。
样例 #1
样例输入 #1
4 2 10
0 4 2 8
0 2
1 9
样例输出 #1
3
2
样例 #2
样例输入 #2
5 3 5
0 1 2 3 4
0 1
0 1
1 1
样例输出 #2
4
6
4
数据范围
| 测试点编号 | 
n≤ | 
m≤ | 
p≤ | 
特殊性质 | 
| 1 | 
100 | 
109 | 
无 | 
| 2 ~ 3 | 
1000 | 
| 4 ~ 5 | 
106 | 
2 | 
p=2 | 
| 6 ~ 9 | 
105 | 
无 | 
| 10 ~ 15 | 
106 | 
106 | 
| 16 | 
109 | 
n=p 且 ai=i | 
| 17 ~ 18 | 
所有操作 o=1 | 
| 19 ~ 20 | 
无 | 
对于所有数据,保证 1≤n,m≤106,2≤p≤109,0≤ai<p。