luogu#P7362. [eJOI2020 Day2] XOR Sort

[eJOI2020 Day2] XOR Sort

题目描述

给定一个长为 NN 的序列 AiA_i,你可以进行如下操作:

选定一个位置 ii,将 AiA_i 修改为 AiAi+1A_i \oplus A_{i+1}AiAi1A_i \oplus A_{i-1}

你想知道,需要用多少次操作才能把 AiA_i 变为:

  • S=1S=1,严格单调递增序列,即 Ai<Ai+1A_i<A_{i+1}
  • S=2S=2,非严格单调递增序列,即 AiAi+1A_i \le A_{i+1}

输入格式

第一行两个整数 N,SN,S,代表序列长度以及测试点类型。
第二行 NN 个整数 AiA_i 代表这个序列。

输出格式

第一行一个整数 KK 代表操作次数,你不需要使得 KK 最小,你只需要满足 0K4×1040 \le K \le 4 \times 10^4
接下来 KK 行每行两个整数 i,ji,j 代表要把 AiA_i 修改为 AiAjA_i \oplus A_j,其中 j=i+1j=i+1i1i-1

5 1
3 2 8 4 1
3
1 2
4 3
5 4
5 2
4 4 2 0 1
3
3 2
4 3
5 4

提示

样例 1 解释

$$[3, 2, 8, 4, 1] \to [\mathbf 1, 2, 8, 4, 1] \to [1, 2, 8, \mathbf{12}, 1] \to [1, 2, 8, 12, \mathbf{ 13}] $$

样例 2 解释

$$[4, 4, 2, 0, 1] \to [4, 4, \mathbf6, 0, 1] \to [4, 4, 6, \mathbf6, 1] \to [4, 4, 6, 6, \mathbf7] $$

数据规模与约定

本题采用捆绑测试。

  • Subtask 1(25 pts):2N1502 \le N \le 150S=1S=1AiA_i 互不相同。
  • Subtask 2(35 pts):2N2002 \le N \le 200S=1S=1AiA_i 互不相同。
  • Subtask 3(40 pts):2N10002 \le N \le 1000S=2S=2

对于 100%100\% 的数据:

  • 1S21 \le S \le 2
  • 2N10002 \le N \le 1000
  • 0Ai<2200 \le A_i<2^{20}

本题使用 Special Judge。

说明

翻译自 eJOI 2020 Day2 A XOR Sort