#include <bits/stdc++.h>
using namespace std;
int main() {
int n, start = 1, koniec, srodek, last = -1;
bool blad;
cin >> n;
vector<int> liczby(n), ilosc(n);
for(int i = 0; i < n; ++i) {
cin >> liczby[i];
}
koniec = n;
while(start != koniec) {
srodek = ceil((double) (start + koniec) / 2.0);
vector<int> ilosc(n);
blad = 0;
for(int i = 0; i < n; ++i) {
if(ilosc[i] > liczby[i]) {
blad = 1;
break;
}
if(ilosc[i] == liczby[i]) continue;
for(int j = i+1; j < min(i+srodek, n); ++j) {
ilosc[j] += liczby[i] - ilosc[i] + 1;
}
}
if(blad) {
koniec = srodek;
}
else {
start = srodek;
}
if(last == srodek) {
break;
}
last = srodek;
}
cout << srodek;
}
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 | #include <bits/stdc++.h> using namespace std; int main() { int n, start = 1, koniec, srodek, last = -1; bool blad; cin >> n; vector<int> liczby(n), ilosc(n); for(int i = 0; i < n; ++i) { cin >> liczby[i]; } koniec = n; while(start != koniec) { srodek = ceil((double) (start + koniec) / 2.0); vector<int> ilosc(n); blad = 0; for(int i = 0; i < n; ++i) { if(ilosc[i] > liczby[i]) { blad = 1; break; } if(ilosc[i] == liczby[i]) continue; for(int j = i+1; j < min(i+srodek, n); ++j) { ilosc[j] += liczby[i] - ilosc[i] + 1; } } if(blad) { koniec = srodek; } else { start = srodek; } if(last == srodek) { break; } last = srodek; } cout << srodek; } |
English