제출 #209626

#제출 시각아이디문제언어결과실행 시간메모리
209626triExamination (JOI19_examination)C++14
100 / 100
730 ms16228 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> // Common file #include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; typedef pair<int, int> pi; typedef pair<ll, ll> pl; typedef tuple<int, int, int, int> qi; typedef vector<int> vi; typedef vector<ld> vd; typedef vector<ll> vl; typedef tree< pi, null_type, less<pi>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; #define pb push_back #define f first #define s second namespace debug { const int DEBUG = true; template<class T1, class T2> void pr(const pair<T1, T2> &x); template<class T, size_t SZ> void pr(const array<T, SZ> &x); template<class T> void pr(const vector<T> &x); template<class T> void pr(const set<T> &x); template<class T1, class T2> void pr(const map<T1, T2> &x); template<class T> void pr(const T &x) { if (DEBUG) cout << x; } template<class T, class... Ts> void pr(const T &first, const Ts &... rest) { pr(first), pr(rest...); } template<class T1, class T2> void pr(const pair<T1, T2> &x) { pr("{", x.f, ", ", x.s, "}"); } template<class T> void prIn(const T &x) { pr("{"); bool fst = 1; for (auto &a : x) { pr(fst ? "" : ", ", a), fst = 0; } pr("}"); } template<class T, size_t SZ> void pr(const array<T, SZ> &x) { prIn(x); } template<class T> void pr(const vector<T> &x) { prIn(x); } template<class T> void pr(const set<T> &x) { prIn(x); } template<class T1, class T2> void pr(const map<T1, T2> &x) { prIn(x); } void ps() { pr("\n"), cout << flush; } template<class Arg, class... Args> void ps(const Arg &first, const Args &... rest) { pr(first, " "); ps(rest...); } } using namespace debug; const int MAXN = 1e5 + 5; int N, Q; pi pts[MAXN]; qi q[MAXN]; int ans[MAXN]; bool lessSum(pi a, pi b) { return a.f + a.s < b.f + b.s; } int main() { cin >> N >> Q; for (int i = 0; i < N; i++) { cin >> pts[i].f >> pts[i].s; } for (int i = 0; i < Q; i++) { int x, y, z; cin >> x >> y >> z; z = max(z, x + y); q[i] = {z, x, y, i}; } sort(pts, pts + N, lessSum); reverse(pts, pts + N); sort(q, q + Q); reverse(q, q + Q); ordered_set byX; ordered_set byY; int nP = 0; for (int i = 0; i < Q; i++) { auto cQ = q[i]; int sum, xL, yL, qI; tie(sum, xL, yL, qI) = cQ; while (nP < N && pts[nP].f + pts[nP].s >= sum) { byX.insert({pts[nP].f, nP}); byY.insert({pts[nP].s, nP}); nP++; } assert(byX.size() == byY.size()); int cnt = byX.size(); // cout << cnt << endl; cnt -= byX.order_of_key({xL, -1}); cnt -= byY.order_of_key({yL, -1}); assert(cnt >= 0); ans[qI] = cnt; } for (int i = 0; i < Q; i++) { cout << ans[i] << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...