Submission #484154

#TimeUsernameProblemLanguageResultExecution timeMemory
484154MahfelExamination (JOI19_examination)C++17
100 / 100
255 ms28936 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<pair<pair<ll,ll>,ll>> vp; #define int ll const int MXN = 5e5 + 20 , Inf = 1e9 + 7; vector<pair<pair<int,int> , int>> q1, q2, a; int ans[MXN] , x[MXN] , y[MXN] , z[MXN] , A[MXN] , B[MXN]; int n,q; struct fenwick { int size; vector<int> bit; fenwick(int n) { size = n; bit.assign(n , 0); } void add(int i , int k) { for(; i < size ; i |= (i+1)) { bit[i] += k; } } int sum(int i) { int res = 0; for(; i >= 0 ; i = (i&(i+1))-1) { res += bit[i]; } return res; } int sum(int l , int r) { return (l == 0 ? sum(r) : sum(r)-sum(l-1)); } }; void compress(vp &a , vp &b) { vector<int> tmp; for(auto p : a) { tmp.push_back(p.first.first); tmp.push_back(p.first.second); } for(auto p : b) { tmp.push_back(p.first.first); tmp.push_back(p.first.second); } sort(tmp.begin() , tmp.end()); int us = unique(tmp.begin() , tmp.end()) - tmp.begin(); for(auto &p : a) { p.first.first = lower_bound(tmp.begin() , tmp.end() , p.first.first) - tmp.begin()+1; p.first.second = lower_bound(tmp.begin() , tmp.end() , p.first.second) - tmp.begin()+1; } for(auto &p : b) { p.first.first = lower_bound(tmp.begin() , tmp.end() , p.first.first) - tmp.begin()+1; p.first.second = lower_bound(tmp.begin() , tmp.end() , p.first.second) - tmp.begin()+1; } } void solve1(vp a , vp q) { compress(a , q); fenwick cnt(MXN); sort(a.rbegin() , a.rend()); sort(q.rbegin() , q.rend()); a.push_back({{-Inf , -Inf} , -1}); int ptr = 0; for(auto query : q) { while(a[ptr].first.first >= query.first.first) { cnt.add(a[ptr++].first.second , 1); } ans[query.second] = cnt.sum(query.first.second , cnt.size-1); } } void solve2(vp a , vp q) { compress(a , q); fenwick cntx(MXN) , cnty(MXN); sort(a.begin() , a.end() , [&](pair<pair<int,int>,int> x , pair<pair<int,int>,int> y) { return A[x.second]+B[x.second] > A[y.second]+B[y.second]; }); sort(q.begin() , q.end() , [&](pair<pair<int,int>,int> x , pair<pair<int,int>,int> y) { return z[x.second] > z[y.second]; }); a.push_back({{-Inf , -Inf} , MXN-1}); int ptr = 0; for(auto query : q) { while(A[a[ptr].second]+B[a[ptr].second] >= z[query.second]) { cntx.add(a[ptr].first.first , 1); cnty.add(a[ptr].first.second , 1); ptr++; } ans[query.second] = ptr-cntx.sum(0 , query.first.first-1)-cnty.sum(0 , query.first.second-1); } } signed main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> n >> q; a.resize(n); for(int i = 0 ; i < n ; i++) { cin >> a[i].first.first >> a[i].first.second; a[i].second = i; A[i] = a[i].first.first; B[i] = a[i].first.second; } for(int i = 0 ; i < q ; i++) { cin >> x[i] >> y[i] >> z[i]; if(x[i]+y[i] >= z[i]) q1.push_back({{x[i] , y[i]} , i}); else q2.push_back({{x[i] , y[i]} , i}); } solve2(a , q2); solve1(a , q1); for(int i = 0 ; i < q ; i++) cout << ans[i] << "\n"; }

Compilation message (stderr)

examination.cpp: In function 'void compress(vp&, vp&)':
examination.cpp:44:9: warning: unused variable 'us' [-Wunused-variable]
   44 |     int us = unique(tmp.begin() , tmp.end()) - tmp.begin();
      |         ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...