#include "bits/stdc++.h"
// @JASPER'S BOILERPLATE
using namespace std;
using ll = long long;
using ull = unsigned long long;
#ifdef JASPER
#include "debug.h"
#else
#define debug(...) 166
#endif
#define int long long
const int N = 3e5 + 5;
struct FenwickTree {
int n;
vector <ll> f;
void init(int _n) {
n = _n;
f.resize(n + 5, 0);
}
void modify(int x, int val) {
for (; x <= n; x += x & -x)
f[x] += val;
}
void upd(int l, int r, int val) {
if (l <= r) {
modify(l, val);
modify(r + 1, -val);
}
else {
modify(1, val);
modify(r + 1, -val);
modify(l, val);
modify(n + 1, -val);
}
}
ll qry(int x) {
ll sum = 0;
for (; x; x -= x & -x)
sum += f[x];
return sum;
}
} bit;
vector <int> adj[N];
vector <int> qs[N];
int ans[N];
ll tar[N];
void dnc(int l, int r, vector <int>& cand) {
if (l + 1 == r) {
debug(l, r, cand);
for (int x : cand) ans[x] = l;
return;
}
int m = (l + r) / 2;
vector <int> L, R;
for (int i = l; i < m; ++i) {
auto x = qs[i];
bit.upd(x[0], x[1], x[2]);
}
vector <int> done, undone;
for (auto x : cand) {
ull sum = 0;
for (int y : adj[x]) sum += (ull) bit.qry(y);
if (sum >= (ull) tar[x]) {
done.push_back(x);
}
else {
tar[x] -= sum;
undone.push_back(x);
}
}
// reroll change as we no longer able to process
for (int i = l; i < m; ++i) {
auto x = qs[i];
bit.upd(x[0], x[1], -x[2]);
}
dnc(l, m, done);
dnc(m, r, undone);
}
int n, m;
int q;
signed main() {
cin.tie(0) -> sync_with_stdio(0);
#ifdef JASPER
freopen("in1", "r", stdin);
#endif
cin >> n >> m;
for (int i = 1; i <= m; ++i) {
int x; cin >> x;
adj[x].push_back(i);
}
for (int i = 1; i <= n; ++i)
cin >> tar[i];
cin >> q;
for (int i = 1; i <= q; ++i) {
int l, r, c;
cin >> l >> r >> c;
qs[i - 1] = {l, r, c};
}
vector <int> cand(n);
iota(cand.begin(), cand.end(), 1);
bit.init(m);
dnc(0, q + 1, cand);
for (int i = 1; i <= n; ++i) {
if (ans[i] == q) cout << "NIE\n";
else cout << ans[i] + 1 << "\n";
}
return 0;
}
Compilation message
met.cpp: In function 'void dnc(long long int, long long int, std::vector<long long int>&)':
met.cpp:10:20: warning: statement has no effect [-Wunused-value]
10 | #define debug(...) 166
| ^~~
met.cpp:58:9: note: in expansion of macro 'debug'
58 | debug(l, r, cand);
| ^~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
14936 KB |
Output is correct |
2 |
Correct |
4 ms |
14940 KB |
Output is correct |
3 |
Correct |
3 ms |
14940 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
14940 KB |
Output is correct |
2 |
Correct |
3 ms |
14940 KB |
Output is correct |
3 |
Correct |
3 ms |
14940 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
50 ms |
18216 KB |
Output is correct |
2 |
Correct |
86 ms |
21452 KB |
Output is correct |
3 |
Correct |
65 ms |
18320 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
62 ms |
18048 KB |
Output is correct |
2 |
Correct |
71 ms |
18012 KB |
Output is correct |
3 |
Correct |
85 ms |
20212 KB |
Output is correct |
4 |
Correct |
19 ms |
17496 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
58 ms |
18012 KB |
Output is correct |
2 |
Correct |
55 ms |
20428 KB |
Output is correct |
3 |
Correct |
40 ms |
16472 KB |
Output is correct |
4 |
Correct |
61 ms |
18516 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
66 ms |
17436 KB |
Output is correct |
2 |
Correct |
77 ms |
18128 KB |
Output is correct |
3 |
Correct |
59 ms |
17608 KB |
Output is correct |
4 |
Correct |
77 ms |
19540 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
752 ms |
43548 KB |
Output is correct |
2 |
Correct |
554 ms |
29020 KB |
Output is correct |
3 |
Correct |
219 ms |
22616 KB |
Output is correct |
4 |
Correct |
783 ms |
42016 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
720 ms |
40136 KB |
Output is correct |
2 |
Correct |
544 ms |
28880 KB |
Output is correct |
3 |
Correct |
163 ms |
21076 KB |
Output is correct |
4 |
Correct |
923 ms |
46896 KB |
Output is correct |