#include "candies.h"
#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e9;
struct node {
long long val, lz, lb, ub;
int st, en;
node *left, *right;
void build(int start, int end) {
st = start;
en = end;
lz = 0;
lb = -inf;
ub = inf;
if (st == en) {
val = 0;
return;
}
int md = (st + en) / 2;
left = new node();
right = new node();
left->build(st, md);
right->build(md + 1, en);
}
void lazy() {
left->val += lz;
left->lz += lz;
left->val = max(left->val, lb);
left->lb = max(left->lb, lb);
left->ub = max(left->ub, lb);
left->val = min(left->val, ub);
left->lb = min(left->lb, ub);
left->ub = min(left->ub, ub);
right->val += lz;
right->lz += lz;
right->val = max(right->val, lb);
right->lb = max(right->lb, lb);
right->ub = max(right->ub, lb);
right->val = min(right->val, ub);
right->lb = min(right->lb, ub);
right->ub = min(right->ub, ub);
lz = 0;
lb = -inf;
ub = inf;
}
long long query(int id) {
if (st > id || en < id) return 0ll;
if (st == en) return val;
lazy();
return left->query(id) + right->query(id);
}
void update(int lf, int rg, int x) {
if (st > rg || en < lf) return;
if (lf <= st && en <= rg) {
val += lz;
lz += x;
return;
}
lazy();
left->update(lf, rg, x);
right->update(lf, rg, x);
}
void update2(int lf, int rg, long long x, long long y) {
if (st > rg || en < lf) return;
if (lf <= st && en <= rg) {
val = max(val, x);
lb = max(lb, x);
ub = max(ub, x);
val = min(val, y);
lb = min(lb, y);
ub = min(ub, y);
return;
}
lazy();
left->update2(lf, rg, x, y);
right->update2(lf, rg, x, y);
}
} sg;
vector<int> distribute_candies(vector<int> c, vector<int> l, vector<int> r, vector<int> v) {
int n = c.size(), q = (int)l.size();
vector<int> s(n);
sg.build(0, n - 1);
for (int i = 0; i < q; i++) {
sg.update(l[i], r[i], v[i]);
sg.update2(0, n - 1, 0, c[0]);
}
for (int i = 0; i < n; i++) {
s[i] = sg.query(i);
}
return s;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
261 ms |
32504 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |