Submission #1038558

#TimeUsernameProblemLanguageResultExecution timeMemory
1038558ArthuroWichRice Hub (IOI11_ricehub)C++17
17 / 100
9 ms2228 KiB
#include "ricehub.h" #include<bits/stdc++.h> using namespace std; int besthub(int n, int L, int x[], long long B) { int ans = 0, h = x[0], s = 0, l = 0, r = 1; deque<int> left, right; for (int i = 1; i < n; i++) { if (s+abs(x[i]-x[0]) <= B) { s += abs(x[i]-x[0]); right.push_back(x[i]); r = i; } } ans = right.size()+1; for (int i = 1; i < n; i++) { int diff = abs(x[i]-h); left.push_back(h); s += left.size()*diff; s -= right.size()*diff; if (!right.empty()) { right.pop_front(); } h = x[i]; while(!left.empty() && s > B) { s -= abs(left.front()-h); left.pop_front(); l++; } if (r < i || right.empty()) { r = i; } while(r+1 < n && s+abs(h-x[r+1]) <= B) { s += abs(h-x[r+1]); right.push_back(x[r+1]); r++; } while(!left.empty() && r+2 < n && s-abs(h-left.front())+abs(h-x[r+1])+abs(h-x[r+2]) <= B) { s = s-abs(h-left.front())+abs(h-x[r+1])+abs(h-x[r+2]); left.pop_front(); right.push_back(x[r+1]); right.push_back(x[r+2]); l++; r += 2; } while(r+1 < n && s+abs(h-x[r+1]) <= B) { right.push_back(x[r+1]); r++; } ans = max(ans, (int) left.size() + (int) right.size() + 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...