Submission #1313584

#TimeUsernameProblemLanguageResultExecution timeMemory
1313584tsetsenbileg쌀 창고 (IOI11_ricehub)C++20
0 / 100
0 ms332 KiB
#include "ricehub.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pr = pair<int, int>;
#define pb push_back();
const int INF = 1e9+7;
int n;
ll k, l;



int besthub(int R, int L, int a[], long long B) {
  n = R; l = L; k = B;
  int res = 0;
  vector<int> pref(n);
  deque<int> lef, rig;
  int r = 1;
  ll sum = 0;
  for (int i = 0; i < n; i++) {
    sum = (sum - rig.size() * (a[min(n-1, i + 1)] - a[i]) + lef.size() * (a[i] - a[max(0, i - 1)]));
    lef.push_back(a[i]);
    if (!rig.empty()) rig.pop_front();
    while (sum > k) {
      sum -= (a[i] - lef.front());
      lef.pop_front();
    }
    while (sum < k && r < n) {
      if (sum + a[r] - a[i] > k) break;
      sum += a[r] - a[i];
      rig.push_back(a[r]);
      r++;
    }
    while (r < n) {
      ll b = lef.front();
      if (a[i] - b > a[r] - a[i]) {
        sum -= (a[i] - b);
        lef.pop_front();
        while (sum < k && r < n) {
          if (sum + a[r] - a[i] > k) break;
          sum += a[r] - a[i];
          rig.push_back(a[r]);
          r++;
        }
      }
      else break;
    }
    res = max(res, (int)(lef.size() + rig.size()));
  }
  // for (auto i : lef) cout << i << ' ';
  // for (auto i : rig) cout << i << ' ';
  return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...