제출 #1245481

#제출 시각아이디문제언어결과실행 시간메모리
1245481alexlin99새로운 문제 (POI11_met)C++20
100 / 100
1291 ms40424 KiB
#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, int p) { for (; x <= m+1; 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(n+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+1, v}); int ptr = 0; vector<int> ans(n+5); while (!qu.empty()) { auto [l, r, vec] = qu.front(); qu.pop(); int mid = (l + r) / 2; if (l == r) { for (auto ele : vec) ans[ele] = l; continue; } 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]) break; } if (sum >= p[ele]) { lft.push_back(ele); } else { rht.push_back(ele); } } qu.push({l, mid, lft}); qu.push({mid+1, r, rht}); } for (int i = 1; i <= n; i++) { if (ans[i] > k) 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...