# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1272426 | cl_lmc | Rice Hub (IOI11_ricehub) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#define int long long
#define double long double
#define f first
#define s second
#define all(x) x.begin(),x.end()
#define pb push_back
#define pii pair<int,int>
#define prq priority_queue
#define um unordered_map
#define inf (long long)2e18
using namespace std;
int dx[4]={-1,0,1,0}, sdx[8]={-1,-1,0,1,1,1,0,-1}, dy[4]={0,-1,0,1}, sdy[8]={0,-1,-1,-1,0,1,1,1};
bool val(int lx, int ly, int x, int y){
if(x>=0&&x<lx&&y>=0&&y<ly) return true;
else return false;
}
bool cmpf(pii a, pii b){
if(a.f!=b.f) return a.f>b.f;
else return a.s<b.s;
}
signed main() {
ios::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr);
int n,le,k;
cin >> n >> le >> k;
int ans=0;
int l=1,r=n,mid;
vector<int>udon(n+1),psum(n+1,0);
for(int i=1; i<=n; i++){
cin >> udon[i];
// psum[i]=psum[i-1]+udon[i];
}
while(l<r){
mid=(l+r)/2;
int mi=inf, it;
for(int i=1; i<=n-mid+1; i++){
// cout << i << ' ' << mid << ' ' << udon[i+mid-1]-udon[i]+1 <<endl;
if(udon[i+mid-1]-udon[i]+1<mi){
mi=udon[i+mid-1]-udon[i]+1;
it=i;
}
}
double avg=0;
// cout << it << endl;
for(int i=it; i<=it+mid-1; i++){
avg+=udon[i];
}
avg/=mid;
int s1=0,s2=0;
for(int i=it; i<=it+mid-1; i++){
s1+=llabs(floor(avg)-udon[i]);
}
for(int i=it; i<=it+mid-1; i++){
s2+=llabs(floor(avg)-udon[i]);
}
if(s1>k&&s2>k){
r=mid;
}else{
l=mid+1;
ans=max(ans,mid);
}
}
cout << ans << '\n';
}