P3275【分块·莫队】动态逆序对2 | ||
|
问题描述
给你一个1,2,...,n的排列记为a[1],a[2],...,a[n]。有m个操作,操作共有两种:
1.交换a[l]和a[r]的值。
2.提问a[l],a[l+1],...,a[r-1],a[r]这个子段的逆序对数目。
nodgd为了表现他很强,就给题目加了强制在线。设lastans表示上一次的提问的答案(一开始为0)。每次输入l',r',真正的l和r要这样计算:l=(l'+lastans)%n+1,r=(r'+lastans)%n+1,如果l>r就再交换一下。
输入格式
第一行两个整数n,m。
第二行n个整数a[1],a[2],...,a[n]。
接下来m行每行三个整数k,l',r'。其中k=1表示操作1,k=2表示操作2。
输出格式
对每个提问输出一行表示答案。
样例输入
5 5
5 4 3 2 1
1 1 2
2 1 2
1 3 4
2 4 5
2 2 5
样例输出
0
8
5
提示
样例解释:
样例输入解密后是这样的
5 5
5 4 3 2 1
1 2 3
2 2 3
1 4 5
2 1 5
2 1 4
数据范围:
对于30%的数据,1<=n,m<=1000;
对于另外10%的数据,操作2不超过15次;
对于另外30%的数据,操作1不超过15次;
对于100%的数据,1<=n,m<=40000,0<=l',r'<=10^6,若非特别说明,两种操作数量大致相等。