诈骗犯,带走!

写在前面

由于是诈骗题,建议先思考一遍题目。

题目一

对于一个序列 a[l,r]a_{[l,r]},定义它的 Mex 变换 b[l,r]b_{[l,r]} 如下:

  • 对于每一个 lirl \leq i \leq r,有 bi=mex({al,al+1,,ai1,ai+1,,ar1,ar})b_i=\text{mex}(\{a_l,a_{l+1},⋯ ,a_{i−1},a_{i+1},⋯ ,a_{r−1},a_r\})

给定一个长度为 nn 的序列 a[1,n]a_{[1,n]}​,你每次操作可以选择一个区间,并将这个区间替换为它的 Mex 变换。

你最多可以进行 kk 次操作,你需要最小化操作完成后序列的字典序。构造任意方案。注意:你并不需要最小化你的操作次数

输入格式

第一行两个整数 n,kn,k

接下来一行 nn 个整数,表示序列 a[1,n]a_{[1,n]}

输出格式

第一行输出一个整数 mm 表示你使用的操作次数。

接下来 mm 行,每行输出两个整数,表示你依次操作的每一个区间。

样例

输入1

1
2
4 3
0 1 2 3

输出1

1
2
3
4
3
2 2
3 3
4 4

输入2

1
2
6 1
0 1 2 0 3 4

输出2

1
2
1
2 3

数据范围

1n,k1051 \leq n,k \leq 10^50ain0 \leq a_i \leq n

解答

先思考:mex\text{mex} 运算有什么性质?

  1. A[1,+)Z,mex(A)=0A \subset [1,+\infty) \cap \mathbb{Z},\text{mex}(A)=0。人话:如果一个集合中所有数都 >0>0,则这个集合的 mex\text{mex} 值一定为 00
  2. 0A,mex(A)10 \in A,\text{mex}(A) \geq 1。人话:如果一个集合中有 00,则这个集合的 mex\text{mex} 值一定 1\geq 1

此题仅仅用到以上两个性质。

a[1,n]a_{[1,n]}​00 的数量为 xx

  • k=1k=1 时,也就是最多只能做一次操作。

    1. x=0x=0 时,答案为 11。对 a[1,n]a_{[1,n]} 做一次变换即可。
    2. x=nx=n 时,答案为 00。本来数列就全零,不需要操作。
    3. 其他情况下,答案为 11。记 a[1,n]a_{[1,n]}​ 中从左到右第一个最大连续非零区间a[u,v]a_{[u,v]},对 a[u,v]a_{[u,v]} 做一次变换即可。
  • 其他情况下,讨论 xx 的大小。

    1. x=0x=0 时,答案为 11。对 a[1,n]a_{[1,n]} 做一次变换即可。
    2. x=1x=1 时,记这一个 00 的下标为 qq。先对 a[1,q1]a_{[1,q-1]} 做一次变换,再对 a[q+1,n]a_{[q+1,n]} 做一次变换即可。答案为 1122
    3. x2x \geq 2 时,答案其实是 22。具体过程是先对 a[1,n]a_{[1,n]} 做一次变换,再对 a[1,n]a_{[1,n]} 做一次变换。第一次变换会将所有数变为 1\geq 1 的数,而第二次变换则会将所有数变为 00
评价

名副其实的诈骗题。题目中说”输出任意方案“让人摸不着头脑,样例中又给了奇奇怪怪的输出。第一眼会想打暴力分,可是暴力很长,一般都写不对。看了解答后才会大呼一声:”原来如此!“真是防不甚防。