luogu#P8449. [LSOT-1] 逆序对

[LSOT-1] 逆序对

题目背景

逆序对真好玩

题目描述

你需要维护一个数列,支持以下 44 种操作:

  1. 区间交换;
  2. 把一个区间向后移动到第 kk 个数字与第 k+1k+1 个数字之间;
  3. 在最后插入一个数 xx
  4. 在开头插入一个数 xx

每个数数的序号为新序列重新从第一个数到第 kk 个数编号为 11kk

现在每次操作过后,请你输出整个数列逆序对数量的奇偶性。

输入格式

第一行输入两个正整数 n,mn,m,表示初始序列的长度与操作个数。

接下来一行输入 nn 个正整数 a1,a2,,ana_1,a_2,\dots,a_n,表示初始序列。

接下来 mm 行,每行先输入一个 tt 表示操作编号,之后:

  • t=1t=1,则输入四个正整数 l1,r1,l2,r2l_1,r_1,l_2,r_2,表示将区间 [l1,r1][l_1,r_1] 与区间 [l2,r2][l_2,r_2] 整体交换,保证 l1r1<l2r2l_1\le r_1< l_2\le r_2
  • t=2t=2,则输入三个正整数 l,r,kl,r,k,表示将区间 [l,r][l,r] 移动至序列的第 kk 个数与第 k+1k+1 个数之间,保证 r<kr<k
  • t=3t=3,则输入一个正整数 xx,表示将 xx 插入到序列末端;
  • t=4t=4,则输入一个正整数 xx,表示将 xx 插入到序列首端。

输出格式

对于每一个指令执行后,如果逆序对数量是偶数,请输出 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][1,1] 和区间 [2,2][2,2] 交换,序列变为 3 4 5 7 2 6

第二次操作将区间 [1,1][1,1] 移动到第 33 和第 44 个数中间。序列变为 4 5 3 7 2 6

第三次操作在序列末端插入 1111,序列变为 4 5 3 7 2 6 11

第四次操作在序列开头插入 11,序列变为 1 4 5 3 7 2 6 11

【数据范围】

「本题采用捆绑测试」

  • Subtask 1(10 pts): n,m102\texttt{Subtask 1(10 pts): }n,m\le 10^2
  • Subtask 2(15 pts): n,m103\texttt{Subtask 2(15 pts): }n,m\le 10^3
  • Subtask 3(20 pts): \texttt{Subtask 3(20 pts): }没有一二操作;
  • Subtask 4(20 pts): \texttt{Subtask 4(20 pts): }没有三四操作;
  • Subtask 5(35 pts): \texttt{Subtask 5(35 pts): }无特殊限制。

对于 100%100\% 的数据,1n,m2×105,ai2×1061\le n,m \le 2\times 10^5,a_i\le 2\times10^6,保证在任意时刻 aa 中的数均互不相同。