Submission #977766

#TimeUsernameProblemLanguageResultExecution timeMemory
977766AmaarsaaRice Hub (IOI11_ricehub)C++17
17 / 100
11 ms2652 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 ++) { if ( X[i + 1] - X[i - 1] > B) continue; lo = 1; hi = min(i + 1, R - (i + 1)) + 1 ; while ( lo < hi ) { mid = (lo +hi)/2; l = i - mid; r = i + mid; // 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 + 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...