Submission #16449

#TimeUsernameProblemLanguageResultExecution timeMemory
16449chan492811Rice Hub (IOI11_ricehub)C++98
100 / 100
29 ms5772 KiB
#include "ricehub.h" #include <cstdlib> #include <cstdio> #include <algorithm> using namespace std; long long n,m,left,right; long long b,l,max1,now; long long arr[100010]; int besthub(int R, int L, int X[], long long B) { long long i; n=R; b=B; for(i=0;i<n;i++) arr[i]=(long long)X[i]; while(right<n && now<=b){ if(arr[right]-arr[0]<=b-now){ now+=arr[right++]-arr[0]; }else break; }max1=max(max1,right-left); for(i=1;i<n;i++){ now+=(i-left)*(arr[i]-arr[i-1]); now-=(right-i)*(arr[i]-arr[i-1]); while(now>b){ if(arr[i]-arr[left]<=arr[right-1]-arr[i]) now-=arr[--right]-arr[i]; else now-=arr[i]-arr[left++]; } while(right<n && arr[i]-arr[left]>=arr[right]-arr[i]){ now-=arr[i]-arr[left]; left++; } while(now<=b){ if(right<n && left>0){ if(arr[i]-arr[left-1]>=arr[right]-arr[i]){ if(arr[right]-arr[i]<=b-now) now+=arr[right++]-arr[i]; else break; }else{ if(arr[i]-arr[left-1]<=b-now) now+=arr[i]-arr[--left]; else break; } }else if(right==n && left>0){ if(arr[i]-arr[left-1]<=b-now) now+=arr[i]-arr[--left]; else break; }else if(right<n && left==0){ if(arr[right]-arr[i]<=b-now) now+=arr[right++]-arr[i]; else break; }else break; }max1=max(max1,right-left); } return (int)max1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...