#include "candies.h"
#include <bits/stdc++.h>
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
using ld = long double;
#define int ll
#define sz(x) ((int)(x).size())
using pii = pair<int,int>;
using tii = tuple<int,int,int>;
template<typename T>
struct AINT {
vector<T> aint; int n;
void init(int n_) {
n = n_;
aint.assign(n * 4 + 100, T());
}
template<class CB> void walk(CB&& cb) { walk(cb, -2, n - 1); }
template<class CB> void walk(CB&& cb, int l, int r) { walk(cb, l, r, 1, -2, n - 1); }
template<class CB> void walk(CB&& cb, int l, int r, int node, int cl, int cr) {
if(cr < l || r < cl) return;
if(l <= cl && cr <= r && !cb(aint[node], cl, cr)) return;
int mid = (cl + cr) >> 1, L = node + (cr - mid) * 2, R = node + 1;
aint[node].push(aint[L], aint[R]);
walk(cb, l, r, R, mid + 1, cr);
walk(cb, l, r, L, cl, mid);
aint[node].pull(aint[L], aint[R]);
}
};
const ll inf = 1e17 + 5;
int get_mn(int a, int b) {
return min(a, b);
}
struct FirstUnit {
int mx, rightmn, rightP;
int fullmn, fullP;
int lazy;
int sum;
FirstUnit(int b = 0, int c = 0, int d = 0, int f = 0, int h = 0, int e = 0): mx(b), rightmn(c), rightP(d), fullmn(f), fullP(h), lazy(0), sum(e) {;}
void pull(const FirstUnit& a, const FirstUnit& b) {
*this = FirstUnit(max(a.mx, b.mx), -1, -1, min(a.fullmn, b.fullmn), -1, a.sum + b.sum);
if(a.mx >= b.mx) {
if(a.rightmn < b.fullmn) rightmn = a.rightmn, rightP = a.rightP;
else rightmn = b.fullmn, rightP = b.fullP;
}
else
rightmn = b.rightmn, rightP = b.rightP;
fullP = a.fullP;
if(fullmn == b.fullmn) fullP = b.fullP;
return;
}
void apply(int a) {
mx += a; rightmn += a; lazy += a; fullmn += a;
}
void push(FirstUnit& a, FirstUnit& b) { a.apply(lazy); b.apply(lazy); lazy = 0; }
};
std::vector<signed> distribute_candies(std::vector<signed> c, std::vector<signed> l,
std::vector<signed> r, std::vector<signed> v) {
int n = sz(c), q = sz(l);
vector<vector<pii>> opers(n + 1);
for(int i = 0; i < q; i++) opers[l[i]].emplace_back(i, v[i]), opers[r[i] + 1].emplace_back(i, -v[i]);
AINT<FirstUnit> operational;
operational.init(q);
operational.walk([&](auto& a, int cl, int cr) { if(cl != cr) return 1; a.rightP = a.fullP = cl; return 0; });
vector<signed> rez;
operational.walk([&](FirstUnit& a, int cl, int cr) {
a.apply(inf); return 0;
}, -2, q - 1);
operational.walk([&](FirstUnit& a, int cl, int cr) {
a.sum += inf; return 0;
}, -2, -2);
operational.walk([&](FirstUnit& a, int cl, int cr) {
a.apply(-inf); return 0;
}, -1, q - 1);
operational.walk([&](FirstUnit& a, int cl, int cr) {
a.sum += -inf; return 0;
}, -1, -1);
for(int i = 0; i < n; i++) {
for(auto [p, v] : opers[i]) {
operational.walk([&](FirstUnit& a, int cl, int cr) {
a.apply(v); return 0;
}, p, q - 1);
operational.walk([&](FirstUnit& a, int cl, int cr) {
a.sum += v; return 0;
}, p, p);
//if(abs(p - 4107) <= 2) cerr << " + " << p << ' ' << v << '\n';
}
//if(i < 16) continue;
int target_bar = c[i];
int lastinterest = -1, lastmin = 0;
operational.walk([&](FirstUnit& a, int cl, int cr) {
if(cr <= lastinterest) return 0;
int my_rightmn = a.rightmn, rP = a.rightP;
operational.walk([&](FirstUnit& u, int tt, int tt2) {
if(my_rightmn > u.fullmn) rP = u.fullP, my_rightmn = u.fullmn; return 0;
}, cr + 1, q - 1);
int R = a.mx - lastmin, L = a.mx - my_rightmn;
if(L > target_bar || L > R) {
lastinterest = rP;
lastmin = my_rightmn;
return 1;
}
else {
return 0;
}
});
int sum = 0, mx = -inf;
operational.walk([&](FirstUnit& a, int cl, int cr) {
mx = max(mx, a.mx);
sum += a.sum;
return 0;
}, lastinterest + 1, q - 1);
rez.emplace_back(sum - max(0ll, mx - target_bar - lastmin));
}
return rez;
}
#undef int
Compilation message
candies.cpp: In lambda function:
candies.cpp:117:13: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
117 | if(my_rightmn > u.fullmn) rP = u.fullP, my_rightmn = u.fullmn; return 0;
| ^~
candies.cpp:117:76: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
117 | if(my_rightmn > u.fullmn) rP = u.fullP, my_rightmn = u.fullmn; return 0;
| ^~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
2 ms |
860 KB |
Output is correct |
4 |
Correct |
2 ms |
860 KB |
Output is correct |
5 |
Correct |
3 ms |
1116 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1123 ms |
69320 KB |
Output is correct |
2 |
Correct |
1069 ms |
68940 KB |
Output is correct |
3 |
Correct |
1121 ms |
69028 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
326 ms |
59436 KB |
Output is correct |
3 |
Correct |
218 ms |
9676 KB |
Output is correct |
4 |
Correct |
816 ms |
70172 KB |
Output is correct |
5 |
Correct |
605 ms |
70092 KB |
Output is correct |
6 |
Correct |
463 ms |
70352 KB |
Output is correct |
7 |
Correct |
470 ms |
70140 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
149 ms |
57064 KB |
Output is correct |
4 |
Correct |
60 ms |
9184 KB |
Output is correct |
5 |
Correct |
290 ms |
65192 KB |
Output is correct |
6 |
Correct |
269 ms |
65672 KB |
Output is correct |
7 |
Correct |
280 ms |
65804 KB |
Output is correct |
8 |
Correct |
267 ms |
65220 KB |
Output is correct |
9 |
Correct |
893 ms |
66216 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
2 ms |
860 KB |
Output is correct |
4 |
Correct |
2 ms |
860 KB |
Output is correct |
5 |
Correct |
3 ms |
1116 KB |
Output is correct |
6 |
Correct |
1123 ms |
69320 KB |
Output is correct |
7 |
Correct |
1069 ms |
68940 KB |
Output is correct |
8 |
Correct |
1121 ms |
69028 KB |
Output is correct |
9 |
Correct |
1 ms |
344 KB |
Output is correct |
10 |
Correct |
326 ms |
59436 KB |
Output is correct |
11 |
Correct |
218 ms |
9676 KB |
Output is correct |
12 |
Correct |
816 ms |
70172 KB |
Output is correct |
13 |
Correct |
605 ms |
70092 KB |
Output is correct |
14 |
Correct |
463 ms |
70352 KB |
Output is correct |
15 |
Correct |
470 ms |
70140 KB |
Output is correct |
16 |
Correct |
0 ms |
344 KB |
Output is correct |
17 |
Correct |
0 ms |
348 KB |
Output is correct |
18 |
Correct |
149 ms |
57064 KB |
Output is correct |
19 |
Correct |
60 ms |
9184 KB |
Output is correct |
20 |
Correct |
290 ms |
65192 KB |
Output is correct |
21 |
Correct |
269 ms |
65672 KB |
Output is correct |
22 |
Correct |
280 ms |
65804 KB |
Output is correct |
23 |
Correct |
267 ms |
65220 KB |
Output is correct |
24 |
Correct |
893 ms |
66216 KB |
Output is correct |
25 |
Correct |
0 ms |
348 KB |
Output is correct |
26 |
Correct |
87 ms |
9188 KB |
Output is correct |
27 |
Correct |
325 ms |
59244 KB |
Output is correct |
28 |
Correct |
465 ms |
69304 KB |
Output is correct |
29 |
Correct |
524 ms |
69484 KB |
Output is correct |
30 |
Correct |
484 ms |
69428 KB |
Output is correct |
31 |
Correct |
511 ms |
69488 KB |
Output is correct |
32 |
Correct |
535 ms |
69836 KB |
Output is correct |