#4470. 最少交换

最少交换

题目描述

给定 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n,每个数字均为 0,1,20, 1, 2 中的一个。可以不断交换序列中的任意两个数,目标是使序列变为单调不递减序列,求最少需要的交换次数。

输入格式

  1. 第一行输入一个整数 nn,表示序列的长度。
  2. 第二行输入 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n,每个整数均为 0,1,20, 1, 2 中的一个。

输出格式

输出一个整数,表示将序列调整为单调不递减所需的最少交换次数。

样例输入 1

5
2 0 1 2 0

样例输出 1

1

样例解释 1

将第一个 22 与最后一个 00 交换后,序列变为 0,0,1,2,20, 0, 1, 2, 2,满足单调不递减,仅需 11 次交换。

样例输入 2

15
2 0 2 0 2 0 0 2 0 0 2 0 0 1 1

样例输出 2

6

样例输入 3

17
2 1 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0

样例输出 3

6

数据范围

数据点占比 序列长度 nn 限制
30% 1n50001 \leq n \leq 5000
60% 1n1051 \leq n \leq 10^5
100% 1n1061 \leq n \leq 10^6

保证序列中每个元素的取值仅为 0,1,20, 1, 2