제출 #340241

#제출 시각아이디문제언어결과실행 시간메모리
340241Kerim쌀 창고 (IOI11_ricehub)C++17
100 / 100
201 ms3308 KiB
#include "bits/stdc++.h" #include "ricehub.h" #define MAXN 100009 #define INF 1000000007 #define mp(x,y) make_pair(x,y) #define all(v) v.begin(),v.end() #define pb(x) push_back(x) #define wr cout<<"----------------"<<endl; #define ppb() pop_back() #define tr(ii,c) for(typeof((c).begin()) ii=(c).begin();ii!=(c).end();ii++) #define ff first #define ss second using namespace std; typedef long long ll; typedef pair<int,int> PII; template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;} template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;} const int error=0xFFFFFFF; int n,l,mx=1; ll b; ll arr[MAXN],par[MAXN]; ll sum(int left,int right){ return par[right]-par[left-1]; } int ok(int type,int ind,int x){ int st=0,en=x; while(st+1<en){ int mid=(st+en)>>1; int dim=x-mid; ll budget=0; ll pul=0; if(ind-dim<1){ st=mid; continue; } if(ind+mid-1>n){ en=mid; continue; } if(dim) budget=(dim*arr[ind]-sum(ind-dim,ind-1)); if(mid) pul=(sum(ind,ind+mid-1)-mid*arr[ind]); if(pul+budget<=b) return 1; if(type==1) en=mid; else st=mid; } for(int mid=st;mid<=en;mid++){ int dim=x-mid; ll budget=0; ll pul=0; if(ind-dim<1 or ind+mid-1>n) continue; if(dim) budget=(dim*arr[ind]-sum(ind-dim,ind-1)); if(mid and ind+mid-1<=n) pul=(sum(ind,ind+mid-1)-mid*arr[ind]); if(pul+budget<=b) return 1; } return 0; } int go(int x){ int st=1,en=n; while(st+1<en){ int mid=(st+en)>>1; if(ok(1,x,mid) or ok(2,x,mid)) st=mid; else en=mid; } for(int i=en;i>=st;i--) if(ok(1,x,i) or ok(2,x,i)) return i; return error; } int besthub(int R, int L, int X[], long long B){ n=R;l=L;b=B; for(int i=0;i<n;i++) arr[i+1]=X[i]; for(int i=1;i<=n;i++) par[i]=par[i-1]+arr[i]; for(int i=1;i<=n;i++) umax(mx,go(i)); return mx; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...