Submission #255236

#TimeUsernameProblemLanguageResultExecution timeMemory
255236islingrMeteors (POI11_met)C++14
100 / 100
1861 ms42648 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (auto i = (a); i < (b); ++i) #define all(x) begin(x), end(x) #define eb(x...) emplace_back(x) using ll = int64_t; const int N = 1 << 19; int m; ll t[N << 1]; ll query(int p) { ll res = 0; for (p += m; p; p >>= 1) res += t[p]; return res; } void upd(int l, int r, int a) { for (l += m, r += m; l < r; l >>= 1, r >>= 1) { if (l & 1) t[l++] += a; if (r & 1) t[--r] += a; } } void update(int l, int r, int a) { if (l < r) upd(l, r, a); else upd(l, m, a), upd(0, r, a); } int n, s[N], ans[N], a[N], b[N], c[N]; vector<int> q[N]; void solve(int l, int r, const vector<int> &cur) { if (r - l == 1 || cur.empty()) { for (int o : cur) ans[o] = l; return; } int m = (l + r) >> 1; rep(e, l, m) update(a[e], b[e], +c[e]); vector<int> L, R; for (int o : cur) { ll sum = 0; for (int z : q[o]) if (s[o] <= (sum += query(z))) break; if (s[o] <= sum) L.eb(o); else s[o] -= sum, R.eb(o); } rep(e, l, m) update(a[e], b[e], -c[e]); solve(l, m, L); solve(m, r, R); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; rep(i, 0, m) { int o; cin >> o; q[--o].eb(i); } rep(i, 0, n) cin >> s[i]; int k; cin >> k; rep(i, 0, k) cin >> a[i] >> b[i] >> c[i], --a[i]; vector<int> cur(n); iota(all(cur), 0); solve(0, k + 1, cur); rep(o, 0, n) if (ans[o] != k) cout << ans[o] + 1 << '\n'; else cout << "NIE\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...