#P13257. [GCJ 2014 #2] Up and Down

[GCJ 2014 #2] Up and Down

Description

给定一个由互不相同的整数构成的序列 A=[A1,A2,,AN]A = [A_1, A_2, \dots, A_N],你希望将其重新排列成一个“先升后降”的序列(即存在某个下标 mm,满足 1mN1 \leq m \leq N,使得 A1<A2<<Am>Am+1>>ANA_1 < A_2 < \dots < A_m > A_{m+1} > \dots > A_N)。

你只能通过每次交换两个相邻元素的方式来进行重排。你特别感兴趣的是:将序列 AA 排列成一个“先升后降”序列所需的最小交换次数

Input Format

输入的第一行是测试用例数量 TT。接下来是 TT 个测试用例。

每个测试用例的第一行是一个整数 NN,表示序列中元素的个数。

下一行是 NN 个互不相同的整数,依次为 A1,A2,,ANA_1, A_2, \dots, A_N

Output Format

对于每个测试用例,输出一行,格式为 "Case #x: y",其中 xx 是测试用例编号(从 1 开始),yy 是将序列 AA 排列成“先升后降”序列所需的最小交换次数。

2
3
1 2 3
5
1 8 10 3 7
Case #1: 0
Case #2: 1

Hint

样例解释

  • 在第一个样例中,原序列已经是目标形式(此处 m=N=3m=N=3),无需进行任何交换,答案为 00
  • 在第二个样例中,将 3377 交换即可构成“先升后降”序列(此时 m=3m=3),因此最小交换次数为 11

限制条件

  • 1T1001 \leq T \leq 100
  • 1Ai1091 \leq A_i \leq 10^9
  • 所有 AiA_i 均互不相同

Small 数据集(7 分)

  • 时间限制:60 3 秒
  • 1N101 \leq N \leq 10

Large 数据集(11 分)

  • 时间限制:120 5 秒
  • 1N10001 \leq N \leq 1000

翻译由 ChatGPT-4o 完成