Submission #1287556

#TimeUsernameProblemLanguageResultExecution timeMemory
1287556simona1230Examination (JOI19_examination)C++20
0 / 100
374 ms8620 KiB
#include <bits/stdc++.h> using namespace std; int n,q; struct student { int x,y,z,i; student(){} student(int _x,int _y,int _z,int _i) { x=_x; y=_y; z=_z; i=_i; } bool operator<(const student&s)const { return z>s.z; } }; bool cmpa(student s1,student s2) { return s1.x>s2.x; } int ans[200001]; student a[200001]; int t[800001]; void upd(int i,int l,int r,int id,int x) { if(l==r) { t[i]+=x; return; } int m=(l+r)/2; if(id<=m)upd(i*2,l,m,id,x); else upd(i*2+1,m+1,r,id,x); t[i]=t[i*2]+t[i*2+1]; } int query(int i,int l,int r,int id) { if(l==r)return t[i]; int m=(l+r)/2; if(m<id)return query(i*2+1,m+1,r,id); return query(i*2,l,m,id)+t[i*2+1]; } int cnt=1; void solve(int l,int r) { if(l==r)return; int m=(l+r)/2; solve(l,m); solve(m+1,r); vector<student> v1,v2; //cout<<l<<" ! "<<r<<endl; for(int i=l;i<=m;i++) { v1.push_back(a[i]); } for(int i=m+1;i<=r;i++) { v2.push_back(a[i]); } sort(v1.begin(),v1.end(),cmpa); sort(v2.begin(),v2.end(),cmpa); int j=0; for(int i=0;i<v2.size();i++) { if(v2[i].i==-1)continue; while(j<v1.size()&&v1[j].x>=v2[i].x) { if(v1[j].i==-1) { //cout<<" + "<<v1[j].y<<endl; upd(1,1,cnt,v1[j].y,1); } j++; } //cout<<" = "<<v2[i].i<<" "<<query(1,1,cnt,v2[i].y)<<endl; ans[v2[i].i]+=query(1,1,cnt,v2[i].y); } for(int i=0;i<j;i++) if(v1[i].i==-1) upd(1,1,cnt,v1[i].y,-1); } bool cmp(student s1,student s2) { return s1.y<s2.y; } void read() { cin>>n>>q; for(int i=1;i<=n;i++) { int x,y; cin>>x>>y; a[i]={x,y,x+y,-1}; } for(int i=1;i<=q;i++) { int x,y,z; cin>>x>>y>>z; a[i+n]={x,y,z,i}; } sort(a+1,a+n+q+1,cmp); for(int i=1;i<=n+q;i++) { int add=0; if(i!=n+q&&a[i].y!=a[i+1].y)add++; a[i].y=cnt; cnt+=add; } sort(a+1,a+n+q+1); /*cout<<endl; for(int i=1;i<=n+q;i++) cout<<a[i].x<<" "<<a[i].y<<" "<<a[i].z<<" "<<a[i].i<<endl; cout<<endl;*/ } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); read(); solve(1,n+q); for(int i=1;i<=q;i++) cout<<ans[i]<<endl; 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...