Submission #1307139

#TimeUsernameProblemLanguageResultExecution timeMemory
1307139micodiyMatryoshka (JOI16_matryoshka)C++20
0 / 100
1 ms672 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 200000; const int MAXQ = 200000; struct Doll { int R, H, id; }; struct Query { int A, B, id; }; int N, Q; Doll dolls[MAXN]; Query queries[MAXQ]; int compH[MAXN]; int compB[MAXQ]; vector<int> values; int ans[MAXQ]; int fenwick[MAXN + MAXQ + 2]; void fenwick_update(int idx, int val) { while (idx <= (int)values.size()) { fenwick[idx] = max(fenwick[idx], val); idx += idx & -idx; } } int fenwick_query(int idx) { int res = 0; while (idx > 0) { res = max(res, fenwick[idx]); idx -= idx & -idx; } return res; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> N >> Q; for (int i = 0; i < N; ++i) { cin >> dolls[i].R >> dolls[i].H; dolls[i].id = i; values.push_back(dolls[i].H); } for (int i = 0; i < Q; ++i) { cin >> queries[i].A >> queries[i].B; queries[i].id = i; values.push_back(queries[i].B); } sort(values.begin(), values.end()); values.erase(unique(values.begin(), values.end()), values.end()); for (int i = 0; i < N; ++i) { compH[i] = lower_bound(values.begin(), values.end(), dolls[i].H) - values.begin() + 1; } for (int i = 0; i < Q; ++i) { int idx = upper_bound(values.begin(), values.end(), queries[i].B) - values.begin(); compB[i] = idx; } sort(dolls, dolls + N, [](const Doll& a, const Doll& b) { if (a.R != b.R) return a.R > b.R; return a.H > b.H; }); sort(queries, queries + Q, [](const Query& a, const Query& b) { return a.A > b.A; }); int ptr = 0; for (int i = 0; i < Q; ++i) { while (ptr < N && dolls[ptr].R >= queries[i].A) { int h = compH[dolls[ptr].id]; int cur = 1 + fenwick_query(h); fenwick_update(h, cur); ++ptr; } ans[queries[i].id] = fenwick_query(compB[queries[i].id]); } for (int i = 0; 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...