#include "candies.h"
#include <bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
#define FOR(i, a, b) for (int i = a; i < b; i++)
#define each(a, x) for (auto &x : a)
#define srt(x) sort(all(x))
#define sz(x) (int) (x).size()
#define pb push_back
#define trace(x) for (auto &el : x) cout << el << " "
using pi = pair<int, int>;
using vi = vector<int>;
using vpi = vector<pi>;
struct Fenw {
int n;
vi bit;
Fenw(int n) {
this->n = n;
bit.assign(n, 0);
}
int g(int i) {
return i & (i + 1);
}
int h(int i) {
return i | (i + 1);
}
void update_point(int r, int delta) {
while (r < n) {
bit[r] += delta;
r = h(r);
}
}
void update_range(int l, int r, int delta) {
update_point(l, delta);
update_point(r + 1, -delta);
}
int query(int idx) {
int res = 0;
while (idx >= 0) {
res += bit[idx];
idx = g(idx);
}
return res;
}
};
vi distribute_candies(vi c, vi l, vi r, vi v) {
int n = sz(c);
int q = sz(r);
vi s(n);
// FOR(j, 0, q) {
// FOR(i, l[j], r[j] + 1) {
// s[i] = v[j] > 0 ? min(c[i], s[i] + v[j]) : max(0, s[i] + v[j]);
// }
// }
vi difference(n + 1, 0);
FOR(j, 0, q) {
difference[l[j]] += v[j];
difference[r[j] + 1] -= v[j];
}
FOR(i, 1, n + 1) {
difference[i] += difference[i - 1];
}
// trace(difference); cout << "\n";
FOR(i, 0, n) {
s[i] = min(c[i], difference[i]);
}
// auto fenw = Fenw(n);
// FOR(j, 0, q) {
// fenw.update_range(l[j], r[j]+1, v[j]);
// }
// FOR(i, 0, n) {
// s[i] = min(c[i], fenw.query(i));
// }
return s;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |