Submission #977775

#TimeUsernameProblemLanguageResultExecution timeMemory
977775AmaarsaaRice Hub (IOI11_ricehub)C++14
100 / 100
14 ms3676 KiB
#include<bits/stdc++.h> #include "ricehub.h" using namespace std; using ll = long long; ll Pre[100005]; ll Sum(ll l, ll r) { if ( l == 0) return Pre[r]; return Pre[r] - Pre[l - 1]; } int besthub(int R, int L, int X[], long long B) { ll s; int i, ans = 1, mn, l, r,lo, hi, mid; for (i = 0; i < R; i ++) { if ( i == 0) Pre[i] = X[i]; else Pre[i] = Pre[i - 1] + X[i]; } for (int i = 1; i + 1 < R; i ++) { lo = 0; hi = R + 1; while ( lo < hi ) { mid = (lo +hi)/2; l = i - mid; r = i + mid; if ( l < 0 || r >= R) { hi =mid; continue; } // cout << mid << " " <<l << " " << i << " " << i + 1 << " " << r<<" " <<Sum(i + 1, r) << " " << Sum(l, i) << endl; if ( Sum(i + 1, r) - Sum(l, i - 1) <= B) lo = mid + 1; else hi = mid; } mid = lo ; // cout << mid << endl; l = i - mid ; r = i + mid; s = Sum(i + 1, r - 1) - Sum(l + 1, i - 1) ; // cout << l << " " << r <<" " << s << endl; mn = INT_MAX; if ( l >= 0) { mn = min(mn, X[i] - X[l]); } if ( r < R) { mn = min(mn, X[r] - X[i]); } if ( mn == INT_MAX) { ans = max(ans, r - l - 1); continue; } s = s + mn; if (s <= B) { ans = max(ans, r - l); } else ans = max(ans, r - l - 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...