#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int ile;
cin>>ile;
vector<long long> tab(ile);
for(int i=0;i<ile;i++) cin>>tab[i];
int wyn=1;
int lewa=1;
int prawa=ile;
while(lewa<=prawa)
{
int licz=(lewa+prawa)/2;
vector<long long> roznica(ile+1,0);
long long pom=0;
bool czy=true;
for(int i=0;i<ile;i++)
{
pom+=roznica[i];
long long suma=tab[i]-pom;
if(suma<0){
czy=false;
break;
}
if(suma>0){
pom+=suma;
roznica[i]+=suma;
if(i+licz<ile) roznica[i+licz]-=suma;
}
}
if(czy){
wyn=licz;
lewa=licz+1;
} else
{
prawa=licz-1;
}
}
cout<<wyn<<"\n";
return 0;
}
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 | #include <bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int ile; cin>>ile; vector<long long> tab(ile); for(int i=0;i<ile;i++) cin>>tab[i]; int wyn=1; int lewa=1; int prawa=ile; while(lewa<=prawa) { int licz=(lewa+prawa)/2; vector<long long> roznica(ile+1,0); long long pom=0; bool czy=true; for(int i=0;i<ile;i++) { pom+=roznica[i]; long long suma=tab[i]-pom; if(suma<0){ czy=false; break; } if(suma>0){ pom+=suma; roznica[i]+=suma; if(i+licz<ile) roznica[i+licz]-=suma; } } if(czy){ wyn=licz; lewa=licz+1; } else { prawa=licz-1; } } cout<<wyn<<"\n"; return 0; } |
English