#9941. [GDKOI2024 普及组] 读书

[GDKOI2024 普及组] 读书

题目描述

Zayin 是一个热爱读书的学生。

最近,Zayin 收到了一本有 nn 个章节的书,其中每个章节 ii 都有一个限制:她必须至少阅读了其他 aia_i 个章节,才能够获取足够的智慧来读懂该章节。

每天,Zayin 都会从头到尾开始阅读这本书。对于她还不能读懂的章节(由于限制)或是已经阅读过的章节,Zayin 会在那天跳过它们。如果在当天从头到尾阅读的过程中,前面刚读过的章节使后面章节满足了限制,她也可以紧接着阅读后面的章节。

现在,Zayin 想要知道至少需要多少天才能阅读完所有的 nn 个章节。

输入格式

第一行包含一个整数 nn,表示书的章节数。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n,表示每个章节的限制。

输出格式

输出一行包含一个整数,表示最少需要的天数。

如果 Zayin 无法阅读完所有的 nn 个章节,输出 1-1

样例

10
3 4 0 6 1 1 0 8 6 3
2

样例解释

第一天从头到尾阅读:

  • 章节 11a1=3a_1=3):已读章节数为 00,不足 33,跳过;
  • 章节 22a2=4a_2=4):已读章节数为 00,不足 44,跳过;
  • 章节 33a3=0a_3=0):已读章节数为 00,满足,阅读。已读章节数变为 11
  • 章节 44a4=6a_4=6):已读章节数为 11,不足 66,跳过;
  • 章节 55a5=1a_5=1):已读章节数为 11,满足,阅读。已读章节数变为 22
  • 章节 66a6=1a_6=1):已读章节数为 22,满足,阅读。已读章节数变为 33
  • 章节 77a7=0a_7=0):满足,阅读。已读章节数变为 44
  • 章节 88a8=8a_8=8):已读章节数为 44,不足 88,跳过;
  • 章节 99a9=6a_9=6):已读章节数为 44,不足 66,跳过;
  • 章节 1010a10=3a_{10}=3):已读章节数为 44,满足,阅读。已读章节数变为 55

第一天结束后,已读章节为 {3,5,6,7,10}\{3,5,6,7,10\}

第二天从头到尾阅读:

  • 章节 11a1=3a_1=3):已读章节数为 55,满足,阅读;
  • 章节 22a2=4a_2=4):已读章节数为 66,满足,阅读;
  • 章节 33:已读,跳过;
  • 章节 44a4=6a_4=6):已读章节数为 77,满足,阅读;
  • 章节 55:已读,跳过;
  • 章节 66:已读,跳过;
  • 章节 77:已读,跳过;
  • 章节 88a8=8a_8=8):已读章节数为 88,满足,阅读;
  • 章节 99a9=6a_9=6):已读章节数为 99,满足,阅读;
  • 章节 1010:已读,跳过。

第二天结束后,所有章节阅读完毕。因此最少需要 22 天。

数据范围与提示

本题使用子任务捆绑测试。

对于所有测试数据,保证 1n5×1051 \leq n \leq 5 \times 10^50ai<n0 \leq a_i < n

  • Subtask 1(10%):1n101 \le n \le 10
  • Subtask 2(10%):1n5001 \le n \le 500
  • Subtask 3(20%):1n50001 \le n \le 5000
  • Subtask 4(20%):1n1051 \le n \le 10^5
  • Subtask 5(40%):1n5×1051 \le n \le 5 \times 10^5