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
#include <bits/stdc++.h>
using namespace std;

const int maxi = 1e6+9;

bool sprawdz(vector<int> tab, int k){
    vector<int> op(tab.size(), 0);

    for(int i = 0; i < tab.size(); i++){
        tab[i] -= op[i];
        if(tab[i] < 0 || (tab[i] > 0 && i+k > tab.size())) return 0;
        op[i+1] += tab[i]+op[i];
        if(i+k < tab.size()) op[i+k] -= tab[i];
    }
    return 1;
}

int main(){
    int n;
    cin >> n;
    vector<int> tab(n);
    for(int& x : tab) cin >> x;
    
    int p = 0, q = n, w = 0;
    while(p < q){
        int mid = (p+q)/2;
        if(sprawdz(tab, mid)){
            w = mid;
            p = mid+1;
        }else q = mid-1;
    }
    //if(sprawdz(tab, (p+q)/2)) w = (p+q)/2;
    cout << w;
}