AT_wtf22_day1_b.Non-Overlapping Swaps

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个 $ (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

    3
    3
    2 3 1
    4
    4 3 2 1
    1
    1

    输出#1

    2
    2 3
    1 2
    3
    1 4
    1 1
    2 3
    0

说明/提示

约束

  • $ 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 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页