题目背景
逆序对真好玩
题目描述
你需要维护一个数列,支持以下 4 种操作:
- 区间交换;
- 把一个区间向后移动到第 k 个数字与第 k+1 个数字之间;
- 在最后插入一个数 x;
- 在开头插入一个数 x。
每个数数的序号为新序列重新从第一个数到第 k 个数编号为 1 到 k。
现在每次操作过后,请你输出整个数列逆序对数量的奇偶性。
输入格式
第一行输入两个正整数 n,m,表示初始序列的长度与操作个数。
接下来一行输入 n 个正整数 a1,a2,…,an,表示初始序列。
接下来 m 行,每行先输入一个 t 表示操作编号,之后:
- 若 t=1,则输入四个正整数 l1,r1,l2,r2,表示将区间 [l1,r1] 与区间 [l2,r2] 整体交换,保证 l1≤r1<l2≤r2;
- 若 t=2,则输入三个正整数 l,r,k,表示将区间 [l,r] 移动至序列的第 k 个数与第 k+1 个数之间,保证 r<k;
- 若 t=3,则输入一个正整数 x,表示将 x 插入到序列末端;
- 若 t=4,则输入一个正整数 x,表示将 x 插入到序列首端。
输出格式
对于每一个指令执行后,如果逆序对数量是偶数,请输出 even
,否则输出 odd
。
6 4
4 3 5 7 2 6
1 1 1 2 2
2 1 1 3
3 11
4 1
odd
odd
odd
odd
提示
【样例解释】
第一次操作将区间 [1,1] 和区间 [2,2] 交换,序列变为 3 4 5 7 2 6
。
第二次操作将区间 [1,1] 移动到第 3 和第 4 个数中间。序列变为 4 5 3 7 2 6
。
第三次操作在序列末端插入 11,序列变为 4 5 3 7 2 6 11
。
第四次操作在序列开头插入 1,序列变为 1 4 5 3 7 2 6 11
。
【数据范围】
「本题采用捆绑测试」
- Subtask 1(10 pts): n,m≤102;
- Subtask 2(15 pts): n,m≤103;
- Subtask 3(20 pts): 没有一二操作;
- Subtask 4(20 pts): 没有三四操作;
- Subtask 5(35 pts): 无特殊限制。
对于 100% 的数据,1≤n,m≤2×105,ai≤2×106,保证在任意时刻 a 中的数均互不相同。