1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector <ll> oni;
ll n;
bool sprawdz(int dod)
{
    ll zuz=0;
    for(ll i=1;i<=n;i++)
    {
        if(i>1000) i=max(i,n-1001);
        ll a=1;
        while((i-1+zuz)*a*(n-i+dod-zuz-a+1)*(i!=n)+(a>1)*(a-1)*a*(n+dod-a)/2+(a>2)*(a-2)*(a-1)*a/6<oni[i])
            {
                a++;
                //cout<<(i-1+zuz)*a*(n-i+dod-zuz-a+1)*(i!=n)+(a>1)*(a-1)*a*(n+dod-a)/2+(a>2)*(a-2)*(a-1)*a/6<<"-"<<a<<"-"<<i<<"\n";
                if(zuz+a-1>dod) return 0;
            }
            //cout<<(i-1+zuz)*a*(n-i+dod-zuz-a+1)*(i!=n)+(a>1)*(a-1)*a*(n+dod-a)/2+(a>2)*(a-2)*(a-1)*a/6<<"-"<<a<<"-"<<i<<"\n";
        zuz+=a-1;
        if(zuz>dod) return 0;
    }
    return 1;
}
int main()
{
    cin.tie(0)->sync_with_stdio(0);
    int sen;
    cin>>sen;
    for(int ar=0;ar<sen;ar++)
    {
        cin>>n;
        oni.resize(1);
        oni[0]=0;
        for(int i=0;i<n;i++)
        {
            int a;
            cin>>a;
            if(a!=0) oni.push_back(a);
        }
        n=oni.size()-1;
        ll a=0,b=3137;
        while(a<b)
        {
            int s=(a+b)/2;
            if(sprawdz(s)) b=s;
            else a=s+1;
        }
        cout<<n+b<<"\n";
    }
}