Submission #1215263

#TimeUsernameProblemLanguageResultExecution timeMemory
1215263vaneaExamination (JOI19_examination)C++20
100 / 100
1421 ms7628 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, q; cin >> n >> q; vector<array<int, 2>> a(n); for(int i = 0; i < n; i++) { cin >> a[i][0] >> a[i][1]; } int S = 2 * pow(n, .666); vector<vector<int>> ord(3, vector<int>(n)); for(int i = 0; i < 3; i++) { iota(ord[i].begin(), ord[i].end(), 0); } for(int i = 0; i < 2; i++) { sort(ord[i].begin(), ord[i].end(), [&](int l, int r) { return a[l][i] < a[r][i]; }); } sort(ord[2].begin(), ord[2].end(), [&](int l, int r) { return a[l][0] + a[l][1] < a[r][0] + a[r][1]; }); vector<vector<int>> vals(3); for(int i = 0; i < 2; i++) { for(int j = 0; j < ord[i].size(); ++j) { vals[i].push_back(a[ord[i][j]][i]); } } for(int j = 0; j < ord[2].size(); ++j) { vals[2].push_back(a[ord[2][j]][0] + a[ord[2][j]][1]); } vector<array<int, 3>> qi(q), s(q); vector<int> qrs(q); iota(qrs.begin(), qrs.end(), 0); for(int i = 0; i < q; i++) { for(int j = 0; j < 3; j++) { cin >> qi[i][j]; qi[i][j] = lower_bound(vals[j].begin(), vals[j].end(), qi[i][j]) - vals[j].begin(); s[i][j] = qi[i][j]; if(j != 2) s[i][j] /= S; } } sort(qrs.begin(), qrs.end(), [&](int a, int b) { return s[a] < s[b]; }); int active = 0; vector<int> ans(q), cnt(n+1, 0); array<int, 3> curr = {n, n, n}; for(auto idx : qrs) { for(int j = 0; j < 3; j++) { while(curr[j] > qi[idx][j]) { --curr[j]; ++cnt[ord[j][curr[j]]]; if(cnt[ord[j][curr[j]]] == 3) ++active; } while(curr[j] < qi[idx][j]) { --cnt[ord[j][curr[j]]]; if(cnt[ord[j][curr[j]]] == 2) --active; ++curr[j]; } } ans[idx] = active; } for(auto it : ans) { cout << it << '\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...