Submission #926334

#TimeUsernameProblemLanguageResultExecution timeMemory
926334VMaksimoski008Meteors (POI11_met)C++14
74 / 100
331 ms65536 KiB
#include <bits/stdc++.h> #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() using namespace std; using ll = long long; struct BIT { int n; vector<int> tree; void config(int _n) { n = _n + 2; tree.resize(_n+10); } void add(int p, int v) { for(p++; p<n; p+=p&-p) tree[p] += v; } ll query(int p) { ll ans = 0; for(p++; p>0; p-=p&-p) ans += tree[p]; return ans; } ll sum(int l, int r) { return query(r) - query(l-1); } void clear() { for(auto &x : tree) x = 0; } }; struct Query { int l, r, x; }; int main() { int n, m, it, i, k; ll total = 0; cin >> n >> m; vector<int> owner[n+5]; for(i=1; i<=m; i++) { int x; cin >> x; owner[x].push_back(i); } int req[n+5]; for(i=1; i<=n; i++) cin >> req[i]; cin >> k; Query qus[k+5], q; for(i=1; i<=k; i++) cin >> qus[i].l >> qus[i].r >> qus[i].x; vector<int> L(n+5, 1), R(n+5, k+1); bool changed = true; BIT bit; bit.config(m+1); stack<int> to_check[k+2]; while(changed) { changed = false; bit.clear(); for(i=1; i<=n; i++) if(L[i] != R[i]) to_check[(L[i]+R[i])/2].push(i); for(it=1; it<=k; it++) { q = qus[it]; if(q.l <= q.r) { bit.add(q.l, q.x); bit.add(q.r+1, -q.x); } else { bit.add(q.l, q.x); bit.add(m+1, -q.x); bit.add(1, q.x); bit.add(q.r+1, -q.x); } while(!to_check[it].empty()) { changed = true; int u = to_check[it].top(); to_check[it].pop(); total = 0; for(int &x : owner[u]) { total += bit.query(x); if(total > req[u]) break; } if(total >= req[u]) R[u] = it; else L[u] = it + 1; } } } for(i=1; i<=n; i++) { if(L[i] <= k) cout << L[i] << '\n'; else cout << "NIE\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...