| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1369475 | aleksandre | Rice Hub (IOI11_ricehub) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
#include"ricehub.h"
using namespace std;
#define int long long
int n;
int a[100005];
int pref[100005];
int mx = 1e15;
int get(int l, int r) {
int mid = (l+r)/2;
int b = pref[mid]-pref[l-1];
int c = mid-l+1;
int d = pref[r]-pref[mid];
int e = r-mid;
int res = (c*a[mid]-b) + (d-e*a[mid]);
return res;
}
int besthub(int R, int L, int X[], long long B) {
n = R;
for (int i = 0; i < n; i++) {
a[i+1] = X[i];
}
pref[0] = 0;
for (int i = 1; i <= n; i++) {
pref[i] = pref[i-1] + a[i];
}
int ansl = -1;
int ansr = -1;
for (int i = 1; i <= n; i++) {
int l = i,r = n;
int idx = -1;
while (l <= r) {
int mid = (l+r)/2;
if (get(i,mid) <= mx) {
idx = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
if (ansr - ansl <= idx - i) {
ansr = idx;
ansl = i;
}
}
return ansr-ansl+1;
}
