Submission #1230929

#TimeUsernameProblemLanguageResultExecution timeMemory
1230929vivkostovExamination (JOI19_examination)C++20
0 / 100
130 ms52588 KiB
#include <bits/stdc++.h> #define endl '\n' using namespace std; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } const int maxn=1e9*2; struct stud { int a,b; }; bool cmp(stud a1,stud a2) { return a1.a>a2.a; } struct query { int x,y,z,ind; }; bool cmp2(query a1,query a2) { return a1.x>a2.x; } struct cell { int l,r,in; }; struct cell2 { int l,r,st; }; int n,q,br=1,otg[100005],mid; stud a[100005]; query b[100005]; cell p[2000005]; cell2 p2[80000005]; void update2(int l,int r,int q,int h) { if(l==r) { p2[h].st++; return; } mid=l/2+r/2+(l%2+r%2)/2; if(mid>=q) { if(!p2[h].l) { br++; p2[h].l=br; } update2(l,mid,q,p2[h].l); } else { if(!p2[h].r) { br++; p2[h].r=br; } update2(mid+1,r,q,p2[h].r); } p2[h].st=p2[p2[h].l].st+p2[p2[h].r].st; } void update1(int l,int r,int q,int h,int st) { if(!p[h].in) { br++; p[h].in=br; } update2(0,maxn,st,p[h].in); if(l==r)return; mid=l/2+r/2+(l%2+r%2)/2; if(mid>=q) { if(!p[h].l) { br++; p[h].l=br; } update1(l,mid,q,p[h].l,st); } else { if(!p[h].r) { br++; p[h].r=br; } update1(mid+1,r,q,p[h].r,st); } } int sum2(int l,int r,int ql,int qr,int h) { if(l>=ql)return p2[h].st; mid=l/2+r/2+(l%2+r%2)/2; int g=0; if(p2[h].r)g=sum2(mid+1,r,ql,qr,p2[h].r); mid=l/2+r/2+(l%2+r%2)/2; if(p2[h].l&&mid>=ql)g+=sum2(l,mid,ql,qr,p2[h].l); return g; } int sum1(int l,int r,int ql,int qr,int h,int st) { if(!p[h].in)return 0; if(l>=ql)return sum2(0,maxn,st,maxn,p[h].in); mid=l/2+r/2+(l%2+r%2)/2; int g=0; if(p[h].r)g=sum1(mid+1,r,ql,qr,p[h].r,st); mid=l/2+r/2+(l%2+r%2)/2; if(p[h].l&&mid>=ql)g+=sum1(l,mid,ql,qr,p[h].l,st); return g; } void resh() { int pos=1; for(int i=1;i<=n;i++) { while(pos<=n&&a[pos].a>=b[i].x) { update1(0,maxn/2,a[pos].b,1,a[pos].a+a[pos].b); pos++; } otg[b[i].ind]=sum1(0,maxn/2,b[i].y,maxn/2,1,b[i].z); } for(int i=1;i<=q;i++) { cout<<otg[i]<<endl; } } void read() { cin>>n>>q; for(int i=1;i<=n;i++) { cin>>a[i].a>>a[i].b; } for(int i=1;i<=q;i++) { cin>>b[i].x>>b[i].y>>b[i].z; b[i].ind=i; } sort(a+1,a+n+1,cmp); sort(b+1,b+q+1,cmp2); resh(); } int main() { speed(); read(); 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...