Submission #520838

#TimeUsernameProblemLanguageResultExecution timeMemory
520838Alex_tz307Rice Hub (IOI11_ricehub)C++17
100 / 100
37 ms6424 KiB
#include <bits/stdc++.h> #include "ricehub.h" using namespace std; int median = -1; multiset<int> low, big; int64_t sum_low, sum_big; void fix() { int m = (low.size() + big.size()) >> 1; if ((int)low.size() < m) { low.emplace(median); sum_low += median; median = *big.begin(); big.erase(big.begin()); sum_big -= median; } if ((int)low.size() > m) { big.emplace(median); sum_big += median; median = *--low.end(); low.erase(--low.end()); sum_low -= median; } } void add(int x) { if (median == -1) { median = x; return; } if (x < median) { low.emplace(x); sum_low += x; } else { big.emplace(x); sum_big += x; } fix(); } void rem(int x) { if (x == median) { median = *big.begin(); big.erase(big.begin()); sum_big -= median; } else { if (x < median) { low.erase(low.find(x)); sum_low -= x; } else { big.erase(big.find(x)); sum_big -= x; } } fix(); } int64_t cost() { return (int64_t)low.size() * median - sum_low + sum_big - (int64_t)big.size() * median; } void maxSelf(int &x, int y) { if (x < y) { x = y; } } int besthub(int R, int L, int X[], long long B) { int ans = 1, l = 0; for (int r = 0; r < R; ++r) { add(X[r]); while (B < cost()) { rem(X[l]); l += 1; } maxSelf(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...