Submission #1272404

#TimeUsernameProblemLanguageResultExecution timeMemory
1272404hgiaExamination (JOI19_examination)C++20
43 / 100
860 ms490248 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define aa array<int,4> const int N=1e5+5; const int ST=4e5+5; const int maxnode=40000000; int sz[maxnode],child[maxnode][2],n,t; int timer=1; int ans[N]; int root[ST]; aa a[N]; aa q[N]; vector<int>nen; vector<int>nen1; int newnode() { timer++; child[timer][0]=child[timer][1]=0; sz[timer]=0; return timer; } void add(int& rt,int val) { if(!rt)rt=newnode(); int u=rt; sz[u]++; for(int i=20;i>=0;i--) { int c=(val>>i)&1; if(!child[u][c])child[u][c]=newnode(); u=child[u][c]; sz[u]++; } } int get(int rt,int val) { if(!rt)return 0; int tmp=0; int u=rt; for(int i=20;i>=0;i--) { int c=(val>>i)&1; if(c==1) { tmp+=sz[child[u][0]]; u=child[u][1]; } else u=child[u][0]; } return tmp; } void update(int id,int l,int r,int pos,int val) { if(pos>r||pos<l)return ; add(root[id],val); if(l==r)return ; int mid=l+r>>1; update(id*2,l,mid,pos,val); update(id*2+1,mid+1,r,pos,val); } int get(int id,int l,int r,int L,int R,int val) { if(l>R||r<L)return 0; if(l>=L&&r<=R) { int rt=root[id]; if(!rt)return 0; return sz[rt]-get(root[id],val); } int mid=l+r>>1; return get(id*2,l,mid,L,R,val)+get(id*2+1,mid+1,r,L,R,val); } bool cmp(aa a,aa b) { return a[0]>b[0]; } main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>t; for(int i=1;i<=n;i++) { cin>>a[i][0]>>a[i][1]; a[i][2]=a[i][0]+a[i][1]; nen.push_back(a[i][2]); nen1.push_back(a[i][1]); } for(int i=1;i<=t;i++) { cin>>q[i][0]>>q[i][1]>>q[i][2]; nen1.push_back(q[i][1]); nen.push_back(q[i][2]); q[i][3]=i; } sort(nen.begin(),nen.end()); nen.erase(unique(nen.begin(),nen.end()),nen.end()); sort(nen1.begin(),nen1.end()); nen1.erase(unique(nen1.begin(),nen1.end()),nen1.end()); int m=nen.size(); for(int i=1;i<=n;i++) { a[i][1]=lower_bound(nen1.begin(),nen1.end(),a[i][1])-nen1.begin()+1; a[i][2]=lower_bound(nen.begin(),nen.end(),a[i][2])-nen.begin()+1; } for(int i=1;i<=t;i++) { q[i][1]=lower_bound(nen1.begin(),nen1.end(),q[i][1])-nen1.begin()+1; q[i][2]=lower_bound(nen.begin(),nen.end(),q[i][2])-nen.begin()+1; } sort(a+1,a+n+1,cmp); sort(q+1,q+t+1,cmp); int j=1; for(int i=1;i<=t;i++) { int x=q[i][0],y=q[i][1],z=q[i][2],id=q[i][3]; while(j<=n&&x<=a[j][0]) { update(1,1,m,a[j][2],a[j][1]); j++; } ans[id]=get(1,1,m,q[i][2],m,y); } for(int i=1;i<=t;i++)cout<<ans[i]<<endl; return 0; }

Compilation message (stderr)

examination.cpp:79:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   79 | main()
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...