#include <bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define s second
#define sz(a) (int)a.size()
struct SegmentTree {
vector<long long> lazy;
void init(int n) {
lazy.assign(4*n, 0);
}
void update(int id, int l, int r, int u, int v, int val) {
if(l>v || r<u) return;
if(l>=u && r<=v) {
lazy[id] += val;
return;
}
int mid = l + r >> 1;
update(id*2, l, mid, u, v, val);
update(id*2+1, mid+1, r, u, v, val);
}
int get(int id, int l , int r, int p) {
if(l==r) {
return lazy[id];
}
int mid = l + r >> 1;
if(mid>=p) return get(id*2, l, mid, p) + lazy[id];
return get(id*2+1, mid+1, r, p) + lazy[id];
}
};
struct event{
int l, r, v;
};
void solve() {
int n, m; cin >> n >> m;
vector<int> have[n+5];
int a[n+5];
for(int i=1; i<=m; i++) {
int c; cin >> c;
have[c].push_back(i);
}
for(int i=1; i<=n; i++) cin >> a[i];
int k; cin >> k;
vector<event> query(k+5);
for(int i=1; i<=k; i++) cin >> query[i].l >> query[i].r >> query[i].v;
vector<int> l(n+5, 1);
vector<int> r(n+5, k+1);
bool flag = true;
vector<int> can[k+5];
SegmentTree tree;
tree.init(m+5);
while(flag) {
flag = false;
for(int i=1; i<=n; i++) {
if(l[i]>=r[i]) continue;
flag = true;
int mid= l[i] + r[i] >> 1;
can[mid].push_back(i);
}
if(!flag) break;
for(int i=1; i<=k; i++) {
if(query[i].l > query[i].r) {
tree.update(1, 1, m, query[i].l, m, query[i].v);
tree.update(1, 1, m, 1, query[i].r, query[i].v);
}
else tree.update(1, 1, m, query[i].l, query[i].r, query[i].v);
for(int p: can[i]) {
long long res = 0;
for(int c: have[p]) {
res += tree.get(1, 1, m, c);
if(res >= a[p]) break;
}
if(res >= a[p]) r[p] = i;
else l[p] = i+1;
}
can[i].clear();
}
tree.init(m+5);
}
for(int i=1; i<=n; i++) {
if(l[i]==k+1) cout<<"NIE\n";
else cout<<l[i]<<'\n';
}
}
signed main(){
ios_base::sync_with_stdio(0);cin.tie(0);
solve();
}
| # | 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... |