Submission #512913

#TimeUsernameProblemLanguageResultExecution timeMemory
512913couplefireExamination (JOI19_examination)C++17
100 / 100
312 ms14924 KiB
#include <bits/stdc++.h> using namespace std; #define pii pair<int, int> #define f first #define s second const int N = 100005; struct BIT{ int bit[N]; void upd(int x){ for(; x<N; x = (x|(x+1))) ++bit[x]; } int query(int x){ int res = 0; for(; x>=0; x = (x&(x+1))-1) res += bit[x]; return res; } } xt, yt, tt; int n, q, xm, ym; pii arr[N]; pair<pii, pii> qs[N]; map<int, int> xmp, ymp; vector<int> xtmp, ytmp; int ans[N]; int main(){ // freopen("a.in", "r", stdin); cin.tie(0)->sync_with_stdio(0); cin >> n >> q; for(int i = 0; i<n; ++i) cin >> arr[i].f >> arr[i].s, xtmp.push_back(arr[i].f), ytmp.push_back(arr[i].s); sort(arr, arr+n, [&](pii a, pii b){return a.f+a.s<b.f+b.s;}); sort(xtmp.begin(), xtmp.end()); xtmp.erase(unique(xtmp.begin(), xtmp.end()), xtmp.end()); xm = xtmp.size(); for(int i = 0; i<xm; ++i) xmp[xtmp[i]] = i; sort(ytmp.begin(), ytmp.end()); ytmp.erase(unique(ytmp.begin(), ytmp.end()), ytmp.end()); ym = ytmp.size(); for(int i = 0; i<ym; ++i) ymp[ytmp[i]] = i; for(int i = 0; i<q; ++i) cin >> qs[i].s.f >> qs[i].s.s >> qs[i].f.f, qs[i].f.s = i; sort(qs, qs+q); for(int i = q-1, j = n-1; i>=0; --i){ while(j>=0 && arr[j].f+arr[j].s>=qs[i].f.f) xt.upd(xmp[arr[j].f]), yt.upd(ymp[arr[j].s]), --j; if(qs[i].s.f+qs[i].s.s<=qs[i].f.f){ int xid = lower_bound(xtmp.begin(), xtmp.end(), qs[i].s.f)-xtmp.begin(); int yid = lower_bound(ytmp.begin(), ytmp.end(), qs[i].s.s)-ytmp.begin(); ans[qs[i].f.s] = (n-1-j)-xt.query(xid-1)-yt.query(yid-1); } } sort(qs, qs+q, [&](pair<pii, pii> a, pair<pii, pii> b){return a.s.f<b.s.f;}); sort(arr, arr+n); for(int i = q-1, j = n-1; i>=0; --i){ while(j>=0 && arr[j].f>=qs[i].s.f) tt.upd(ym-1-ymp[arr[j].s]), --j; if(qs[i].s.f+qs[i].s.s>qs[i].f.f){ int yid = lower_bound(ytmp.begin(), ytmp.end(), qs[i].s.s)-ytmp.begin(); ans[qs[i].f.s] = tt.query(ym-1-yid); } } for(int i = 0; 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...