AT_wtf22_day1_b Non-Overlapping Swaps

题目描述

给定一个 $ (1,2,\cdots,N) $ 的排列 $ P=(P_1,P_2,\cdots,P_N) $。 请你求出一组整数对序列 $ ((l_1,r_1),(l_2,r_2),\cdots,(l_k,r_k)) $,使其满足以下所有条件: - 序列长度 $ k $ 满足 $ 0\leq k\leq N-1 $。 - $ 1\leq l_i\leq r_i\leq N $($ 1\leq i\leq k $)。 - 对于每个 $ 1\leq i\leq k-1 $,有 $ r_{i+1}\leq l_i $ 或 $ r_i\leq l_{i+1} $。 - 经过以下操作 $ k $ 次后,$ P $ 能变为升序排列: - 第 $ i $ 次操作:交换 $ P_{l_i} $ 和 $ P_{r_i} $ 的值。如果 $ l_i=r_i $,则什么也不做。 在本题的约束下,必然存在满足条件的序列。 对于每个输入文件中的 $ T $ 个测试用例,请输出答案。

输入格式

输入以如下格式从标准输入读入: > $ T $ $ case_1 $ $ case_2 $ $ \vdots $ $ case_T $ 每个测试用例 $ case_i $ 的格式如下: > $ N $ $ P_1 $ $ P_2 $ $ \cdots $ $ P_N $

输出格式

对于每个测试用例,输出如下格式的答案: > $ k $ $ l_1 $ $ r_1 $ $ l_2 $ $ r_2 $ $ \vdots $ $ l_k $ $ r_k $ 如果有多组解,输出任意一组都视为正确。

说明/提示

### 约束 - $ 1\leq T\leq 250000 $ - $ 1\leq N\leq 250000 $ - $ P=(P_1,P_2,\cdots,P_N) $ 是 $ (1,2,\cdots,N) $ 的一个排列 - 每个输入文件中所有 $ N $ 的总和不超过 $ 250000 $ - 输入的所有值均为整数 ### 样例解释 1 以第一个测试用例为例。该输出样例满足所有条件。例如,第 4 个条件可以这样验证:$ P=(2,3,1)\to $(交换 $ P_2,P_3 $)$\to(2,1,3)\to $(交换 $ P_1,P_2 $)$\to(1,2,3) $。反之,下面这种输出是不正确的: ``` 2 1 2 1 3 ``` 因为它不满足第 3 个条件。 由 ChatGPT 4.1 翻译