AT_utpc2022_j.Divide and Sort

通过率:0%

AC君温馨提醒

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

题目描述

给定 (1,2,…,N)(1,2,\ldots,N) 的一个排列 P=(P1,P2,…,PN)P=(P_1,P_2,\ldots,P_N)。你可以进行如下操作,操作次数不少于 00 次且不多于 1515 次。

  • 选择一组整数 (l,r)(l,r),满足 1≤l≤r≤N1\leq l\leq r\leq N 且 r−l+1r-l+1 为奇数,将数列 (Pl,Pl+1,…,Pr)(P_l,P_{l+1},\ldots,P_r) 的中位数设为 MM。这时,存在唯一的整数 xx 满足 Px=MP_x=M。将 PP 的第 ll 项到第 x−1x-1 项(如果存在)按升序排序,将 x+1x+1 项到第 rr 项(如果存在)按升序排序。

请判断是否可以通过不超过 1515 次操作将 PP 排成升序排列。如果可以,请输出一种操作序列。

中位数的定义为:长度为 2n−12n-1 的数列的中位数,是将该数列升序排列后,从前往后第 nn 个元素的值。例如,(5,4,2)(5,4,2) 的中位数是 44,(3,1,5,2,4)(3,1,5,2,4) 的中位数是 33,(9)(9) 的中位数是 99。

输入格式

输入从标准输入以如下格式给出。

N P1 P2 … PNN\ P_1\ P_2\ \ldots\ P_N

输出格式

如果无法在 1515 次以内(含 1515 次)将 PP 排成升序排列,则输出 −1-1。

否则,第一行输出操作次数 kk,其中 kk 是 00 到 1515(含)之间的整数。

接下来 kk 行,每行两个以空格分隔的整数 ll 和 rr,表示每次操作选择的区间。

如果有多种答案,可以输出其中任意一种。

输入输出样例

  • 输入#1

    5
    2 1 3 5 4

    输出#1

    1
    1 5
  • 输入#2

    4
    1 2 3 4

    输出#2

    2
    1 3
    2 4
  • 输入#3

    2
    2 1

    输出#3

    -1

说明/提示

部分分

  • 若能正确解决所有 1≤N≤71\leq N\leq 7 的数据,将获得 1010 分。

样例解释 1

对 l=1,r=5l=1,r=5 进行一次操作。

数列 (2,1,3,5,4)(2,1,3,5,4) 的中位数为 33,且 Px=3P_x=3 的 x=3x=3。将 PP 的 l=1l=1 到 x−1=2x-1=2 排序,以及 x+1=4x+1=4 到 r=5r=5 排序。

该操作后,PP 变为 (1,2,3,4,5)(1,2,3,4,5),确实变为升序排列。

样例解释 2

只要操作次数不超过 1515,不要求操作次数最少。

样例解释 3

若无法在 1515 次以内操作将 PP 升序化,请输出 −1-1。

数据范围

  • 输入均为整数
  • 1≤N≤2×1051 \leq N \leq 2\times 10^5
  • PP 是 (1,2,…,N)(1,2,\ldots,N) 的一个排列

由 ChatGPT 5 翻译

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

首页