제출 #207673

#제출 시각아이디문제언어결과실행 시간메모리
207673nvmdavaExamination (JOI19_examination)C++17
2 / 100
3092 ms190980 KiB
#include <bits/stdc++.h> using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #define ll long long #define ff first #define ss second #define N 100005 #define MOD 1000000007 #define INF 0x3f3f3f3f vector<pair<int, pair<int, int> > > ar; vector<pair<pair<int, int>, pair<int, int> > > qu; map<int, int> scmp, tcmp; map<int, int> bit[N]; int get(int x, int y){ int s = 0; while(x){ int t = y; while(t){ auto it = bit[x].find(t); if(it != bit[x].end()) s += it -> ss; t -= t & -t; } x -= x & -x; } return s; } void update(int x, int y){ while(x < N){ int t = y; while(t < N){ ++bit[x][t]; t += t & -t; } x += x & -x; } } int ans[N]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, q; cin>>n>>q; int mxs = 0, mxt = 0; for(int i = 1; i <= n; ++i){ int s, t; cin>>s>>t; mxs = max(mxs, s); mxt = max(mxt, t); ar.push_back({s + t, {s, t}}); scmp[s] = 0; tcmp[t] = 0; } int w; w = 0; for(auto& x : scmp) x.ss = ++w; w = 0; for(auto& x : tcmp) x.ss = ++w; int ss = scmp.size(), ts = tcmp.size(); for(auto& x : ar){ x.ss.ff = ss + 1 - scmp[x.ss.ff]; x.ss.ss = ts + 1 - tcmp[x.ss.ss]; } sort(ar.rbegin(), ar.rend()); for(int i = 1; i <= q; ++i){ int a, b, c; cin>>a>>b>>c; if(a > mxs || b > mxt) continue; a = scmp.lower_bound(a) -> ss; b = tcmp.lower_bound(b) -> ss; a = ss + 1 - a; b = ts + 1 - b; qu.push_back({{c, i}, {a, b}}); } sort(qu.rbegin(), qu.rend()); w = 0; for(auto& x : qu){ while(w != n && ar[w].ff >= x.ff.ff){ update(ar[w].ss.ff, ar[w].ss.ss); ++w; } ans[x.ff.ss] = get(x.ss.ff, x.ss.ss); } for(int i = 1; i <= q; ++i) cout<<ans[i]<<'\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...