Submission #1313683

#TimeUsernameProblemLanguageResultExecution timeMemory
1313683tsetsenbilegRice Hub (IOI11_ricehub)C++20
17 / 100
1 ms392 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<ll> pref, aa;

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

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