Submission #1279005

#TimeUsernameProblemLanguageResultExecution timeMemory
1279005IBoryExamination (JOI19_examination)C++20
100 / 100
243 ms7928 KiB
#include <bits/stdc++.h> #define pii pair<int, int> using namespace std; const int MAX = 100007; int X[MAX], Y[MAX], A[MAX], B[MAX], C[MAX], ans[MAX]; vector<pii> ord; struct BIT { int T[MAX]; void Update(int i, int v) { for (; i < MAX; i += i & -i) T[i] += v; } int Query(int L, int R) { int ret = 0; L--; for (; R; R -= R & -R) ret += T[R]; for (; L; L -= L & -L) ret -= T[L]; return ret; } } T; void Solve(int L, int R) { int mid = (L + R) >> 1; vector<pii> P; for (int i = L; i <= mid; ++i) { auto [_, p] = ord[i]; if (p > 0) P.emplace_back(X[p], p); } for (int i = mid + 1; i <= R; ++i) { auto [_, p] = ord[i]; if (p < 0) P.emplace_back(A[-p], p); } sort(P.begin(), P.end(), greater<pii>()); for (auto [_, n] : P) { if (n > 0) T.Update(Y[n], 1); else ans[-n] += T.Query(B[-n], MAX - 1); } for (auto [_, n] : P) if (n > 0) T.Update(Y[n], -1); if (L != mid) Solve(L, mid); if (mid + 1 != R) Solve(mid + 1, R); } int main() { ios::sync_with_stdio(0); cin.tie(0); int N, Q; cin >> N >> Q; vector<int> U; for (int i = 1; i <= N; ++i) { cin >> X[i] >> Y[i]; U.push_back(Y[i]); ord.emplace_back(X[i] + Y[i], i); } U.push_back(-1); sort(U.begin(), U.end()); U.erase(unique(U.begin(), U.end()), U.end()); for (int i = 1; i <= N; ++i) Y[i] = lower_bound(U.begin(), U.end(), Y[i]) - U.begin(); for (int i = 1; i <= Q; ++i) { cin >> A[i] >> B[i] >> C[i]; B[i] = lower_bound(U.begin(), U.end(), B[i]) - U.begin(); ord.emplace_back(C[i], -i); } sort(ord.begin(), ord.end(), greater<pii>()); Solve(0, ord.size() - 1); for (int i = 1; i <= Q; ++i) 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...