Submission #1304794

#TimeUsernameProblemLanguageResultExecution timeMemory
1304794dreamoonMeteors (POI11_met)C++17
100 / 100
946 ms50156 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int maxn = 3e5 + 5; int meteor[maxn]; int want[maxn]; int L[maxn], R[maxn], ans[maxn]; int N, M; vector<array<int, 3>> events; vector<int> stations[maxn]; bool check() { for (int i = 1; i <= N; i++) { if (L[i] <= R[i]) return false; } return true; } struct BIT { vector<int> bit; int n; BIT(int n) { bit.resize(n, 0); } void upd(int x, int v) { for (; x < bit.size(); x += (x & -x)) bit[x] += v; } int qry(int x) { int sum = 0; for (; x; x -= (x & -x)) sum += bit[x]; return sum; } void upd_range(int l, int r, int v) { if (l <= r) { upd(l, v); upd(r + 1, -v); } else { upd(l, v); upd(M + 1, -v); upd(1, v); upd(r + 1, -v); } } }; main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> N >> M; for (int i = 1; i <= M; i++) { cin >> meteor[i]; stations[meteor[i]].push_back(i); } for (int i = 1; i <= N; i++) { cin >> want[i]; ans[i] = -1; } int Q; cin >> Q; for (int i = 1; i <= Q; i++) { int l, r, v; cin >> l >> r >> v; events.push_back({l, r, v}); } for (int i = 1; i <= N; i++) { L[i] = 1; R[i] = Q; } while (!check()) { vector<int> num(N + 1, 0), mid(N + 1, 0); vector<vector<int>> query(Q + 5); BIT bit(maxn); for (int i = 1; i <= N; i++) { if (L[i] > R[i]) continue; mid[i] = (L[i] + R[i]) / 2; query[mid[i]].push_back(i); } for (int i = 1; i <= Q; i++) { int l = events[i - 1][0], r = events[i - 1][1], v = events[i - 1][2]; bit.upd_range(l, r, v); for (auto j : query[i]) { for (auto k : stations[j]) { num[j] += bit.qry(k); num[j] = min(num[j], (long long)4e18); } } } for (int i = 1; i <= N; i++) { if (L[i] > R[i]) continue; if (num[i] < want[i]) { L[i] = mid[i] + 1; } else { R[i] = mid[i] - 1; ans[i] = mid[i]; } } } for (int i = 1; i <= N; i++) { if (ans[i] != -1) cout << ans[i] << "\n"; else cout << "NIE" << "\n"; } return 0; }

Compilation message (stderr)

met.cpp:44:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   44 | main() {
      | ^~~~
#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...