#include "ricehub.h"
// #include <dbg.h>
#include <algorithm>
#include <cassert>
#include <iterator>
#include <vector>
using namespace std;
using ull = unsigned long long;
vector<ull> sp;
vector<uint> x;
// 1 2 10
// 1 - 10 + 2 - 10
// 1 + 2 - 10 * 2
// t = {1, 2, 10}
// 0 1 2
// sum do 2 = sp[2]
ull get_ss(uint b, uint e) {
ull count = e - b;
ull sum_i = sp[e] - sp[b];
ull tot_sum = count * x[e];
ull sum_s = tot_sum - sum_i;
return sum_s;
}
ull get_sp(uint b, uint e) {
// 1 2 5 6
// 2 - 1 + 5 - 1 + 6 - 1
// 2 + 5 + 6 - 3 * 1
ull count = e - b;
ull sum_i = sp[e + 1] - sp[b + 1];
ull tot_sum = count * x[b];
ull sum_s = sum_i - tot_sum;
return sum_s;
}
ull get_dst_ss(uint b, uint v, uint beg_i) {
ull dst = get_ss(b, beg_i);
ull count = beg_i - b + 1;
return dst + count * (v - x[beg_i]);
}
ull get_dst_sp(uint e, uint v, uint beg_i) {
ull dst = get_sp(beg_i, e);
ull count = e - beg_i + 1;
return dst + count * (x[beg_i] - v);
}
ull get_dst(uint b, uint e) {
// const vector<uint>::iterator beg_it = lower_bound(x.begin(), x.end(), v);
// uint beg_i = distance(x.begin(), beg_it);
uint beg_i = (b + e) / 2;
// beg_i
// A B v C D E
// --- dsta
// dstb------
// ull dsta = (beg_i > 0 ? get_dst_ss(b, v, beg_i - 1) : 0);
// ull dstb = (beg_i < x.size() ? get_dst_sp(e, v, beg_i) : 0);
ull dsta = get_ss(b, beg_i);
ull dstb = get_sp(beg_i, e);
// dbg(b, e,beg_i, dsta, dstb);
return dsta + dstb;
}
bool check(uint k, ull b) {
for (uint i = 0; i + k <= x.size(); i++) {
if (get_dst(i, i + k - 1) <= b) {
return true;
}
}
return false;
}
uint slv(uint r, ull b) {
sp.resize(r + 1);
sp[0] = 0;
for (uint i = 0; i < r; i++) {
sp[i + 1] = sp[i] + x[i];
}
uint s = 0, e = r;
while (s < e) {
const uint mid = (s + e + 1) / 2;
if (check(mid, b)) {
s = mid;
} else {
e = mid - 1;
}
}
return s;
}
int besthub(int R, int L, int X[], long long B) {
x.resize(R);
copy(X, X + R, x.begin());
(void)L;
return slv(R, B);
}
| # | 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... |