#codefestival2016qualBd. [codefestival_2016_qualB_d]Greedy customers

[codefestival_2016_qualB_d]Greedy customers

题目描述

在高桥商店前,有 NN 个人排成一条队列等待。每个人手上持有的现金为正整数 AiA_i,表示排在队列前面的第 ii 个人的现金数。

商店老板高桥先生决定采取以下方案:他选择一个商品,设定一个正整数 PP 表示商品的价格,并按顺序向顾客展示这个商品,从队列前面开始。如下所述,重复执行这一步骤。

在每一步中,当向顾客展示商品时,如果价格 PP 小于等于该顾客当前持有的现金,该顾客将购买该商品,高桥先生结束当前步骤。也就是说,在队列中第一个持有现金大于等于 PP 的顾客手中的现金减少 PP,然后开始下一步。

高桥先生可以在每一步独立地设定正整数 PP 的值。

他希望能够卖出尽可能多的商品。然而,如果一个顾客购买商品后手上剩余的现金为 00,那么这个人就没有回家的车费了。对于高桥先生来说,顾客无法回家会是个问题,所以他不希望任何人的现金变成 00

请编写一个程序,来确定在给定每个顾客初始持有的现金情况下,高桥先生能够卖出的最大商品数量。

约束条件

  • 1N1000001 ≤ |N| ≤ 100000
  • 1Ai109(1iN)1 ≤ A_i ≤ 10^9(1 ≤ i ≤ N)
  • 所有输入都是整数。

输入

从标准输入中以以下形式给出输入。

NN A1A_1 : ANA_N

输出

输出一个整数,表示高桥先生能够卖出的最大商品数量。


示例输入 1

3
3
2
5

示例输出 1

3

作为 PP 的值,按顺序选择 1,4,11, 4, 1


示例输入 2

15
3
1
4
1
5
9
2
6
5
3
5
8
9
7
9

示例输出 2

18