Submission #896450

#TimeUsernameProblemLanguageResultExecution timeMemory
896450AndreyExamination (JOI19_examination)C++14
43 / 100
768 ms147648 KiB
#include<bits/stdc++.h> using namespace std; vector<pair<long long,long long>> seg(500001,{-1,-1}); vector<long long> wow[500001]; vector<long long> wut[500001]; long long p = 0; long long banana(const vector<long long>& haha, long long a) { if(haha.empty() || haha[haha.size()-1] < a) { return 0; } long long l = 0,r = haha.size()-1; while(l < r) { long long m = (l+r)/2; if(haha[m] >= a) { r = m; } else { l = m+1; } } return haha.size()-l; } void ins(long long l, long long r, long long x, long long pos, long long y, long long sb) { wow[x].push_back(y); wut[x].push_back(sb); if(l == r) { return; } long long m = (l+r)/2; if(pos <= m) { if(seg[x].first == -1) { p++; seg[x] = {p,seg[x].second}; } ins(l,m,seg[x].first,pos,y,sb); } else { if(seg[x].second == -1) { p++; seg[x] = {seg[x].first,p}; } ins(m+1,r,seg[x].second,pos,y,sb); } } long long calc(long long l, long long r, long long x, long long ql, long long qr, bool yeah, long long a) { if(x == -1) { return 0; } if(ql == l && qr == r) { if(yeah) { return banana(wow[x],a); } else { return banana(wut[x],a); } } long long m = (l+r)/2; if(qr <= m) { return calc(l,m,seg[x].first,ql,qr,yeah,a); } else if(ql > m) { return calc(m+1,r,seg[x].second,ql,qr,yeah,a); } else { return calc(l,m,seg[x].first,ql,m,yeah,a)+calc(m+1,r,seg[x].second,m+1,qr,yeah,a); } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long n,q,a,b,c; cin >> n >> q; for(long long i = 0; i < n; i++) { cin >> a >> b; ins(0,INT_MAX,0,a,b,a+b); } for(int i = 0; i <= 500000; i++) { sort(wut[i].begin(),wut[i].end()); sort(wow[i].begin(),wow[i].end()); } for(int i = 0; i < q; i++) { cin >> a >> b >> c; if(a+b >= c) { cout << calc(0,INT_MAX,0,a,INT_MAX,true,b) << "\n"; } else { cout << calc(0,INT_MAX,0,a,c-b,false,c)+calc(0,INT_MAX,0,c-b+1,INT_MAX,true,b) << "\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...