Submission #1313668

#TimeUsernameProblemLanguageResultExecution timeMemory
1313668tsetsenbilegRice Hub (IOI11_ricehub)C++20
0 / 100
1 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;
vector<int> pref, a;

int comp(int i, int l, int r) {
  int lc = i - l + 1, rc = r - i + 1;
  return (a[i] - a[l]) * lc - (pref[i] - pref[l-1]) + (a[r] - a[i]) * rc - (pref[r] - pref[i-1]);
}

int besthub(int R, int L, int b[], long long B) {
  a.resize(n+1);
  for (int i = 0; i < n; i++) a[i+1] = b[i];
  n = R; k = B;
  int res = 0;
  ll sum = 0;
  pref.resize(n+1, 0);
  for (int i = 1; i <= n; i++) pref[i] = pref[i-1] + a[i];
  int l, r;
  l = 1; r = 1;
  for (int i = 1; i <= n; i++) {
    sum = comp(i, l, r);
    while (sum > k) {
      sum = comp(i, ++l, r);
    }
    while (r < n) {
      int nsum = comp(i, l, r+1);
      if (nsum > k) {
        break;
      }
      else {
        sum = nsum;
        r++;
      }
    }
    while (r < n && sum > comp(i, l+1, r+1)) {
      l++;
      while (comp(i, l, r) <= k && r <= n) {
        sum = comp(i, l, r++);
      }
    }
    res = max(res, r - l + 1);
  }
  // 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...