#P7128. 「RdOI R1」序列(sequence)

「RdOI R1」序列(sequence)

题目描述

有一序列 xx ,长度为 qq ,序列中的每个数只出现一次。

即:序列 xx 是 11 到 qq 的一个排列。

对于序列 xx 的操作只有一种:对于一个数 xix_i ,你可以使其与 x2ix_{2i} 或 x2i+1x_{2i+1} 交换位置(如果它们存在的话)。

现在请你使序列 xx 变为一个升序序列,并按顺序输出你进行的操作。

输入格式

输入数据共 22 行。

第 11 行, 11 个正整数,qq。

第 22 行, qq 个正整数, x1~qx_{1~q}。

输出格式

输出数据共 ansans 行, ansans 表示你的操作次数。

第 11 ~ ansans 行,每行两个整数,ii ,jj ,表示交换 xix_i 和 xjx_j 的位置 (i<j)(i < j)。

3
3 1 2
1 3
1 2
7
1 3 2 7 6 4 5
2 4
1 2
1 3
3 7
2 5
1 2
1 3
3 6
1 2
2 5
1 3
1 2
2 4
1 2
1 3
1 2

提示

【样例说明】

样例#1说明:

交换 22 和 33 ,序列变为:2,1,32,1,3。

再交换 22 和 11 ,序列变为:1,2,31,2,3。

【数据范围】

对于 40%40\% 的数据,3≤q≤2103 \le q \le 2^{10}。

对于 100%100\% 的数据,3≤q≤2173 \le q \le 2^{17},1≤xi≤q1 \le x_i \le q。

【提示】

  • 使用 Special Judge。
  • q=2p−1(p∈N∗)q = 2 ^ p - 1(p \in \mathbb{N}^*)
  • 最多进行 2q×⌈log⁡2q⌉2q\times\lceil\log_2 q\rceil 次操作。
  • 样例的输出数据只是众多方案中的一种。
  • 因为是 special judge ,因此不提供附加样例。

【文件读入读出】(模拟,提交代码时不需使用)

  • 文件名:sequence.cpp
  • 读入文件名:sequence.in
  • 读出文件名:sequence.out