P6642 [CCO 2020] Exercise Deadlines

题目描述

现在有 $N$ 个任务,第 $i$ 个任务需要在 $d_i$ 的时间前完成。 完成一个任务只需要 $1$ 的时间。 现在的完成顺序为 $1,2,3\ldots N$,但很显然,这种顺序有可能无法完成全部任务。 您可以交换任意**相邻**的任务序号来达到完成全部任务的结果。 举个例子:$1,2,3\ldots N\to 1,3,2\ldots N$。 您需要在保证所有任务完成的情况下,输出最小的交换次数。 如果无论如何都不能完成所有任务,请输出 `-1`。

输入格式

第一行为一个整数 $N$。 第二行为 $N$ 个整数 $d_i$。

输出格式

仅一行一个整数,表示在保证所有任务完成的情况下,最小的交换次数。 如果无论如何都不能完成所有任务,请输出 `-1`。

说明/提示

#### 样例解释 #### 样例 1 解释 一种合法的完成顺序为 $1,4,3,2$,需要交换 $3$ 次。 #### 样例 2 解释 很明显,您不可能在同一时间内做完两项任务。 #### 子任务 **本题使用捆绑测试** - Subtask 1($68$ 分):$N\le 5\times 10^3$。 - Subtask 1($32$ 分):无特殊限制。 对于 $100\%$ 的数据,保证 $1\le N\le 2\times 10^5$,$1\le d_i\le N$。 #### 说明 本题译自 [Canadian Computing Olympiad 2020](https://cemc.math.uwaterloo.ca/contests/computing/2020/index.html) [Day 1](https://cemc.math.uwaterloo.ca/contests/computing/2020/cco/day1.pdf) T2 Exercise Deadlines。