Submission #1214565

#TimeUsernameProblemLanguageResultExecution timeMemory
1214565dubabubaMatryoshka (JOI16_matryoshka)C++20
100 / 100
219 ms7276 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> pii; #define ff first #define ss second #define MP make_pair struct QUERY { int a, b; int index; QUERY() : index(0), a(0), b(0) {}; QUERY(int i, int a, int b) : index(i), a(a), b(b) {} }; const int INF = 2e9 + 10; const int mxn = 2e5 + 10; int n, q, ans[mxn]; QUERY query[mxn]; pii doll[mxn]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> q; for(int i = 0; i < n; i++) cin >> doll[i].ff >> doll[i].ss; sort(doll, doll + n, [&](pii a, pii b) { if(a.ff != b.ff) return a.ff < b.ff; return a.ss > b.ss; }); reverse(doll, doll + n); for(int i = 0; i < q; i++) { int a, b; cin >> a >> b; query[i] = QUERY(i, a, b); } sort(query, query + q, [&](auto x, auto y) { return x.a > y.a; }); vector<int> MS(n + 1, INF); function<void(int)> add = [&](int i) { int val = doll[i].ss; int id = upper_bound(MS.begin(), MS.end(), val) - MS.begin(); MS[id] = val; }; int ptr = 0; for(int i = 0; i < q; i++) { int a = query[i].a; int b = query[i].b; int id = query[i].index; while(ptr < n && doll[ptr].ff >= a) { add(ptr); ptr++; } int len = upper_bound(MS.begin(), MS.end(), b) - MS.begin(); ans[id] = len; } for(int i = 0; i < q; i++) cout << ans[i] << endl; 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...