问题 5185 --整理暑假作业

5185: 整理暑假作业★★★★★

时间限制: 4 Sec  内存限制: 256 MB
提交: 5  解决: 5
[提交][状态][命题人:]

题目描述

开学后,小明带着一堆暑期作业回到学校,需要将它们整理好交给老师。
共有 n 本作业排成一行,第 i 本作业是第 c[i] 学科的。每次小明可以将相邻的两本作业交换位置。求最少需要交换几次,才能使得所有相同学科的作业均分别在一起,即对于任意两份作业 c[l],c[r] (l<r) ,若 c[l]=c[r] ,则 c[l]=c[l+1]=c[l+2]=...=c[r] 。

输入

第一行输入一个整数 n(2≤n≤400 000) 。
第二行输入 n 个整数 c[1],c[2],...,c[n] (1≤c[i]≤20) 。

输出

输出一个整数,表示最少交换次数。
样例输入
Copy
样例1:
7
3 4 2 3 4 2 2

样例2:
5
20 1 14 10 2

样例3:
13
5 5 4 4 3 5 7 6 5 4 4 6 5
样例输出
Copy
样例1:
3

样例2:
0

样例3:
21

提示

在第一组样例中,交换顺序如下:
初始为 [3, 4, 2, 3, 4, 2, 2]
第一次 [3, 4, 3, 2, 4, 2, 2]
第二次 [3, 3, 4, 2, 4, 2, 2]
第三次 [3, 3, 4, 4, 2, 2, 2]
共交换 3 次。

来源

[提交][状态]