이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |