似曾相识燕归来

Luogu
IDLGP9347
Time1000ms
Memory128MB
DifficultyP6
洛谷原创Special JudgeO2优化排序构造洛谷月赛分类讨论
$n$ 只燕在夕阳中飞过。按从前到后的顺序,第 $i$ 只燕的大小为 $p_i$,且 $p$ 是一个长度为 $n$ 的排列。 现在可以进行**至多 $L$ 次**如下操作: - 选定三个整数 $i,j,k$ 满足 $1\le i<j<k\le n$,如果 $p_i>p_k$,交换第 $i,j$ 只燕;否则交换第 $j,k$ 只燕。 为了使队形整齐,我们希望燕是从前到后升序排列的,即 $\forall 1\le i\le n$ 都有 $p_i=i$。 问是否可以达成目标。若可以,请构造一组符合要求的操作。 ## Input **本题有多组测试数据。** 第一行一个整数 $T$,表示测试数据组数。 对于每组测试数据: - 第一行两个整数 $n,L$。 - 第二行 $n$ 个整数 $p_1,p_2,\ldots,p_n$。 ## Output 对于每组测试数据: - 若无法用至多 $L$ 次操作使得 $p$ 升序排列,仅输出一行 `-1`; - 否则第一行输出一个整数表示操作次数 $x$,后 $x$ 行每行输出三个整数 $i,j,k$ 表示进行的操作。你需要保证 $0\le x\le L$,$1\le i<j<k\le n$。 [samples] ## Background 春雨将过,忽而燕鸣轻唤,唤起春波荡漾。春波荡漾,漾起去年的回忆。回忆生香,香满檐下。檐下燕巢残旧,不禁落泪,抬头望归来之燕,心中一动,却是旧时相识…… ## Note **【提示】** 一个长度为 $n$ 的排列是一个满足 $1$ 到 $n$ 中的所有正整数恰好出现 $1$ 次的数组。例如,$[3,1,2]$ 是一个长度为 $3$ 的排列,而 $[5,5,1,2,3]$ 不是一个排列。 **【样例 1 解释】** - 第一次操作中,$i=1,j=3,k=4$,由于 $p_1>p_4$,我们交换 $p_1,p_3$,此时 $p=[1,2,4,3]$; - 第二次操作中,$i=2,j=3,k=4$,由于 $p_2<p_4$,我们交换 $p_3,p_4$,此时 $p=[1,2,3,4]$。 **【数据规模与约定】** **本题采用捆绑测试。** - Subtask 1(5 points):$n\le 3$。 - Subtask 2(5 points):$n\le 4$。 - Subtask 3(5 points):$T\le 50$,$n\le 8$。 - Subtask 4(10 points):$n\le 8$。 - Subtask 5(25 points):$L=n+2$。 - Subtask 6(25 points):$L=n+1$。 - Subtask 7(25 points):无特殊限制。 对于 $100\%$ 的数据,$1\le T\le 10^5$,$1\le n,\sum n\le 2\times 10^6$,$n\le L\le n+2$,$p$ 为一个 $1\sim n$ 的排列。
Samples
Input #1
1
4 4
4 2 1 3
Output #1
2
1 3 4
2 3 4
API Response (JSON)
{
  "problem": {
    "name": "似曾相识燕归来",
    "description": {
      "content": "$n$ 只燕在夕阳中飞过。按从前到后的顺序,第 $i$ 只燕的大小为 $p_i$,且 $p$ 是一个长度为 $n$ 的排列。 现在可以进行**至多 $L$ 次**如下操作: - 选定三个整数 $i,j,k$ 满足 $1\\le i<j<k\\le n$,如果 $p_i>p_k$,交换第 $i,j$ 只燕;否则交换第 $j,k$ 只燕。 为了使队形整齐,我们希望燕是从前到后升序排列的,即 $\\fo",
      "description_type": "Markdown"
    },
    "platform": "Luogu",
    "limit": {
      "time_limit": 1000,
      "memory_limit": 131072
    },
    "difficulty": {
      "LuoguStyle": "P6"
    },
    "is_remote": true,
    "is_sync": true,
    "sync_url": null,
    "sign": "LGP9347"
  },
  "statements": [
    {
      "statement_type": "Markdown",
      "content": "$n$ 只燕在夕阳中飞过。按从前到后的顺序,第 $i$ 只燕的大小为 $p_i$,且 $p$ 是一个长度为 $n$ 的排列。\n\n现在可以进行**至多 $L$ 次**如下操作:\n\n- 选定三个整数 $i,j,k$ 满足 $1\\le i<j<k\\le n$,如果 $p_i>p_k$,交换第 $i,j$ 只燕;否则交换第 $j,k$ 只燕。\n\n为了使队形整齐,我们希望燕是从前到后升序排列的,即 $\\fo...",
      "is_translate": false,
      "language": "English"
    }
  ]
}
Full JSON Raw Segments