#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n, m, k;
vector<int> o, p;
vector<ll> bit;
vector<vector<int>> a;
vector<array<int, 3>> q;
void bit_modify(int x, ll p) {
for (; x <= m; x += x & -x)
bit[x] += p;
}
ll bit_prefix(int x) {
ll res = 0;
for (; x > 0; x -= x & -x)
res += bit[x];
return res;
}
int main() {
cin >> n >> m;
bit.resize(m+5);
o.resize(m+5);
a.resize(n+5);
for (int i = 1; i <= m; i++) {
cin >> o[i];
a[o[i]].push_back(i);
}
p.resize(m+5);
for (int i = 1; i <= n; i++)
cin >> p[i];
cin >> k;
q.resize(k+5);
for (int i = 1; i <= k; i++)
cin >> q[i][0] >> q[i][1] >> q[i][2];
queue<tuple<int, int, vector<int>>> qu;
vector<int> v;
for (int i = 1; i <= n; i++) {
v.push_back(i);
}
qu.push({1, k, v});
int ptr = 0;
vector<int> ans(n+5);
while (!qu.empty()) {
auto [l, r, vec] = qu.front(); qu.pop();
int mid = l + (r - l) / 2;
if (ptr > mid) {
bit = vector<ll>(m+5);
ptr = 0;
}
while (ptr < mid) {
ptr++;
bit_modify(q[ptr][0], q[ptr][2]);
bit_modify(q[ptr][1]+1, -q[ptr][2]);
if (q[ptr][0] > q[ptr][1])
bit_modify(1, q[ptr][2]);
}
vector<int> lft, rht;
for (auto ele : vec) {
ll sum = 0;
for (auto x : a[ele]) {
sum += bit_prefix(x);
}
if (sum >= p[ele]) {
lft.push_back(ele);
} else {
rht.push_back(ele);
}
}
if (l == r) {
for (auto ele : lft)
ans[ele] = l;
for (auto ele : rht)
ans[ele] = -1;
continue;
}
if (!lft.empty())
qu.push({l, mid, lft});
if (!rht.empty())
qu.push({mid+1, r, rht});
}
for (int i = 1; i <= n; i++) {
if (ans[i] <= 0)
cout << "NIE\n";
else
cout << ans[i] << '\n';
}
return 0;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |