제출 #1317712

#제출 시각아이디문제언어결과실행 시간메모리
1317712vuvietExamination (JOI19_examination)C++20
100 / 100
216 ms9988 KiB
/** * Author: trviet * Studies at: Le Hong Phong High School for the Gifted **/ #include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() constexpr int maxn = 1e6 + 6; int n, q, k, bit[maxn], res[maxn]; void update(int i, int v) { for (; i <= k; i += i & -i) bit[i] += v; } int get(int i) { int res = 0; for (; i > 0; i -= i & -i) res += bit[i]; return res; } struct Event { int x, y, z, id; bool operator < (Event o) const { return (x == o.x ? id < o.id : x > o.x); } } qr[maxn]; void ReadData() { cin.tie(0)->sync_with_stdio(0); cin >> n >> q; k = n + q; for (int i = 1; i <= n; ++i) { cin >> qr[i].x >> qr[i].y; qr[i].z = qr[i].x + qr[i].y; } for (int i = n + 1; i <= n + q; ++i) { cin >> qr[i].x >> qr[i].y >> qr[i].z; qr[i].id = i; } } void Divide(int l, int r) { if (l == r) return; int m = (l + r) >> 1; Divide(l, m), Divide(m + 1, r); vector<Event> L, R; for (int i = l; i <= m; ++i) if (qr[i].id == 0) L.push_back(qr[i]); for (int i = m + 1; i <= r; ++i) if (qr[i].id != 0) R.push_back(qr[i]); sort(all(L), [&](Event a, Event b) { return a.y > b.y; }); sort(all(R), [&](Event a, Event b) { return a.y > b.y; }); int j = 0; for (int i = 0; i < R.size(); ++i) { while (j < L.size() && L[j].y >= R[i].y) update(L[j++].z, 1); res[R[i].id] += get(k) - get(R[i].z - 1); } for (int i = 0; i < j; ++i) update(L[i].z, -1); } void Solve() { vector<int> values; for (int i = 1; i <= n + q; ++i) values.push_back(qr[i].z); sort(all(values)); values.resize(unique(all(values)) - values.begin()); for (int i = 1; i <= n + q; ++i) qr[i].z = lower_bound(all(values), qr[i].z) - values.begin() + 1; sort(qr + 1, qr + 1 + n + q); Divide(1, n + q); for (int i = n + 1; i <= n + q; ++i) cout << res[i] << "\n"; } int main() { ReadData(); Solve(); 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...