Submission #94654

#TimeUsernameProblemLanguageResultExecution timeMemory
94654andy627Rice Hub (IOI11_ricehub)C++17
100 / 100
220 ms2680 KiB
#include <stdio.h> #include <algorithm> #define LL long long using namespace std; LL sum[111111]; int besthub(int R,int L,int X[],LL B){ sum[0]=X[0]; for(int i=1;i<R;i++) sum[i]=sum[i-1]+X[i]; int ans=0; for(int i=0;i<R;i++){ int s=1,e=L,m; while(s<=e){ m=(s+e)>>1; int sidx=lower_bound(X,X+R,X[i]-m)-X; int eidx=upper_bound(X,X+R,X[i]+m)-X-1; if((sum[eidx]-sum[i])-(LL)X[i]*(eidx-i)+(LL)X[i]*(i-sidx)-((!i?0:sum[i-1])-(!sidx?0:sum[sidx-1]))<=B) s=m+1; else e=m-1; } int sidx=lower_bound(X,X+R,X[i]-e)-X; int eidx=upper_bound(X,X+R,X[i]+e)-X-1; int sidx2=lower_bound(X,X+R,X[i]-s)-X; int eidx2=upper_bound(X,X+R,X[i]+s)-X-1; LL res=(sum[eidx]-sum[i])-(LL)X[i]*(eidx-i)+(LL)X[i]*(i-sidx)-((!i?0:sum[i-1])-(!sidx?0:sum[sidx-1])); if(sidx!=sidx2) ans=max((LL)ans,eidx-sidx+1+min((LL)eidx2-eidx+sidx-sidx2,(B-res)/(X[i]-X[sidx2]))); else if(eidx!=eidx2) ans=max((LL)ans,eidx-sidx+1+min((LL)eidx2-eidx+sidx-sidx2,(B-res)/(X[eidx2]-X[i]))); else ans=max(ans,eidx-sidx+1); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...