Submission #389716

#TimeUsernameProblemLanguageResultExecution timeMemory
389716qwerasdfzxclMeteors (POI11_met)C++14
74 / 100
2078 ms37068 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; struct Seg{ ll tree[600600]; int sz; void init(){ for (int i=1;i<((sz)<<1);i++) tree[i] = 0; } void update_p(int i, int p){ i += sz; for (tree[i]+=p;i>1;i>>=1) tree[i>>1] = tree[i]+tree[i^1]; } void update(int l, int r, int p){ update_p(l, p); if (r<sz-1) update_p(r+1, -p); } ll query(int l, int r){ ll ret = 0; for (l += sz, r += sz;l<r;l>>=1, r>>=1){ if (l&1) ret += tree[l++]; if (r&1) ret += tree[--r]; } return ret; } void debug(){ for (int i=sz;i<(sz<<1);i++) printf("%lld ", tree[i]); printf("\n"); } }tree; struct Query{ int l, r, a; }query[300300]; vector<int> ar[300300], q[300300]; int l[300300], r[300300], ans[300300]; ll val[300300]; int main(){ int n, m; cin.tie(NULL); ios_base::sync_with_stdio(false); cin >> n >> m; tree.sz = m+1; for (int i=1;i<=m;i++){ int x; cin >> x; ar[x-1].push_back(i); } for (int i=0;i<n;i++) cin >> val[i]; int tmp; cin >> tmp; for (int i=0;i<tmp;i++){ cin >> query[i].l >> query[i].r >> query[i].a; } for (int i=0;i<n;i++) l[i] = 0, r[i] = tmp; int c=0; while(1){ c++; //assert(c<12); bool chk=0; for (int i=0;i<=tmp;i++) q[i].clear(); for (int i=0;i<n;i++) if (l[i]!=r[i]){ q[(l[i]+r[i])>>1].push_back(i); chk=1; } if (!chk) break; tree.init(); for (int i=0;i<tmp;i++){ if (query[i].l<=query[i].r) tree.update(query[i].l, query[i].r, query[i].a); else{ tree.update(1, query[i].r, query[i].a); tree.update(query[i].l, m, query[i].a); } for (auto &j:q[i]){ ll tmp1 = 0; for (auto &x:ar[j]){ tmp1 += tree.query(1, x+1); } if (tmp1>=val[j]){ r[j] = i; ans[j] = i+1; } else l[j] = i+1; } //tree.debug(); } } for (int i=0;i<n;i++){ if (l[i] == tmp) cout << "NIE\n"; else cout << ans[i] << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...