제출 #810807

#제출 시각아이디문제언어결과실행 시간메모리
810807OrazBExamination (JOI19_examination)C++14
20 / 100
545 ms53628 KiB
#include <bits/stdc++.h> // #include <ext/pb_ds/assoc_container.hpp> // #include <ext/pb_ds/tree_policy.hpp> // using namespace __gnu_pbds; using namespace std; #define pii pair <int, int> // #define ordered_set tree<pair<pii,int>, null_type,less<pair<pii,int>>, rb_tree_tag,tree_order_statistics_node_update> #define all(x) (x).begin(), (x).end() #define ll long long int #define pb push_back #define ff first #define ss second const int N = 1e6; int M = 0; int n, q; map<int,int> mp, now1, now2; int pos[N], s[N], t[N], ans[N]; int x[N], y[N], z[N], ind[N]; int f[N][2]; vector<int> E[N]; void add(int x, int y){ for (int i = x; i <= M; i += i&(-i)){ f[i][0]++; E[i].pb(y); } for (int i = y; i <= M; i += i&(-i)){ f[i][1]++; } } int count(int x, int y){ int cnt = 0; for (int i = x; i > 0; i -= i&(-i)){ cnt += f[i][0]; int l = 0, r = E[i].size()-1, pos = -1; while(l <= r){ int md = (l+r)>>1; if (E[i][md] > y) r = md - 1; else{ pos = md; l = md + 1; } } cnt -= pos+1; } for (int i = y; i > 0; i -= i&(-i)){ cnt += f[i][1]; } return cnt; } int main () { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> q; set<int> dec1, dec2; for (int i = 1; i <= n; i++){ cin >> s[i] >> t[i]; dec1.insert(s[i]); dec2.insert(t[i]); } for (int i = 1; i <= q; i++){ cin >> x[i] >> y[i] >> z[i]; dec1.insert(x[i]); dec2.insert(y[i]); } int T = 0; for (auto i : dec1){ if (!mp[i]++) now1[i] = ++T; } M = T; T = 0; mp.clear(); for (auto i : dec2){ if (!mp[i]++) now2[i] = ++T; } M = max(M, T); for (int i = 1; i <= n; i++){ add(now1[s[i]], now2[t[i]]); } for (int i = 1; i <= M; i++) sort(all(E[i])); for (int i = 1; i <= q; i++){ cout << n-count(now1[x[i]]-1, now2[y[i]]-1) << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...