Submission #1104929

#TimeUsernameProblemLanguageResultExecution timeMemory
1104929IrateMeteors (POI11_met)C++17
100 / 100
772 ms28604 KiB
#include<bits/stdc++.h> using namespace std; const int mxN = 3e5 + 5; long long fen[mxN]; vector<int> pos[mxN]; int sectors[mxN], need[mxN], ans[mxN]; int P = -1, n, m, q; void Update(int pos, int val){ while(pos < mxN){ fen[pos] += val; pos += (pos & -pos); } } long long Sum(int pos){ long long sum = 0; while(pos > 0){ sum += fen[pos]; pos -= (pos & -pos); } return sum; } struct Query{ int l, r, a; } queries[mxN]; void f(int l, int r, vector<int>&exist){ int mid = (l + r) / 2; if(mid == q){ for(int &sector : exist){ ans[sector] = -1; } return; } if(l == r){ for(int &sector : exist){ ans[sector] = l; } return; } while(P + 1 <= mid){ P++; int l = queries[P].l, r = queries[P].r, a = queries[P].a; if(l <= r){ Update(l, a); Update(r + 1, -a); } else{ Update(l, a); Update(1, a); Update(r + 1, -a); } } while(P - 1 >= mid){ int l = queries[P].l, r = queries[P].r, a = queries[P].a; if(l <= r){ Update(l, -a); Update(r + 1, a); } else{ Update(l, -a); Update(1, -a); Update(r + 1, a); } P--; } vector<int>left, right; for(int &sector : exist){ long long tot = 0; for(int &i : pos[sector]){ tot += Sum(i); if(tot >= need[sector]){ break; } } if(tot >= need[sector]){ left.push_back(sector); } else{ right.push_back(sector); } } f(l, mid, left); f(mid + 1, r, right); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> m >> n; for(int i = 1;i <= n;++i){ cin >> sectors[i]; pos[sectors[i]].push_back(i); } vector<int>exist; for(int i = 1;i <= m;++i){ cin >> need[i]; exist.push_back(i); } cin >> q; for(int i = 0;i < q;++i){ int l, r, a; cin >> l >> r >> a; queries[i] = {l, r, a}; } f(0, q, exist); for(int i = 1;i <= m;++i){ if(ans[i] < 0){ cout << "NIE\n"; } else{ cout << ans[i] + 1 << '\n'; } } }
#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...