lzh的蹦床
题号:NC221818
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

sky被lzh抓到了一间密室,密室里放了一排紧密相邻的蹦床 ,lzh声称自己最喜欢欣赏sky跳跃在空中的姿态,并示意他可以开始跳了。sky的跳跃方向是单向向前的,当然如果他落到一个蹦床上则会继续向前弹跳,
直到sky落到了坚硬可靠的地面上,他才可以结束这一趟弹跳,lzh当然允许sky自己选择每一趟跳跃开始的蹦床。
每一个蹦床都有它的弹力值 ,这决定了从该蹦床起跳后的落点--通俗来说,从 蹦床起跳将会落到 蹦床上(假如这个位置有蹦床)。但由于sky心中有怨气,他便不会爱惜的使用lzh珍藏已久的蹦床,所以,
可惜的是,他每一次的起跳都会造成当前蹦床的弹力值 ,但幸好lzh的蹦床是为了sky的安全设计的,也就是说,这个蹦床的弹力值不会低于 。sky饿的不行了,他想尽早回宿舍,他观察到lzh对他进行距离为 的跳跃(
也就是从 跳到 )不怎么感兴趣,他打算使所有蹦床弹力值都变成 ,这样他就可以回宿舍吃饭了,请你帮帮他,计算出他最少需要跳多少趟。

输入描述:

第一行输入一个正整数 ,表示测试用例的个数
接下来 个用例,
每个用例第一行一个正整数 ,表示蹦床的数量;
第二行有 个正整数 ,表示每个蹦床的弹力值。

输出描述:

对于每组用例,输出一个整数,表示sky最少需要跳多少趟
示例1

输入

复制
3
7
1 4 2 2 2 2 2
2
2 3
5
1 1 1 1 1

输出

复制
4
3
0

说明

对于第一组的跳跃:
[1,4,1,2,1,2,1]
[1,3,1,2,1,1,1]
[1,2,1,2,1,1,1]
[1,1,1,1,1,1,1]