Submission #378823

#TimeUsernameProblemLanguageResultExecution timeMemory
378823eulerdesojaExamination (JOI19_examination)C++17
100 / 100
158 ms12304 KiB
#include<bits/stdc++.h> #include<fstream> using namespace std; #define ll long long #define pb push_back #define sz(x) int(x.size()) typedef pair<int,int>ii; typedef vector<int> vi; const int mxn=1e5+5; struct t{ int a,b,sum; bool operator <(const t& p ){return sum>p.sum;} }; struct t1{ int x,y,z,id; bool operator<(const t1& p){return z>p.z;} }; vector<t>al; vector<t1>op; int n,q,bit[2][mxn],ans[mxn]; vector<ii> cmp[2]; void upd(int k,int pos){ for(;pos<mxn;pos+=pos&-pos)bit[k][pos]++; } int query(int k,int pos){ int sum=0; for(;pos>0;pos-=pos&-pos)sum+=bit[k][pos]; return sum; } int32_t main(){ ios_base::sync_with_stdio(0);cin.tie(0); //setIO("sort"); cin>>n>>q; for(int i=0;i<n;i++){ int a,b;cin>>a>>b; al.pb({a,b,a+b}); cmp[0].pb({a,i}); cmp[1].pb({b,i}); } for(int i=0;i<2;i++)sort(cmp[i].begin(),cmp[i].end()); for(int i=0;i<q;i++){ int x,y,z;cin>>x>>y>>z; z=max(z,x+y); auto it=lower_bound(cmp[0].begin(),cmp[0].end(),ii(x,-1)); x=(it-cmp[0].begin())+1; auto it1=lower_bound(cmp[1].begin(),cmp[1].end(),ii(y,-1)); y=(it1-cmp[1].begin())+1; op.pb({x,y,z,i}); } for(int i=0;i<n;i++){ al[cmp[0][i].second].a=i+1; al[cmp[1][i].second].b=i+1; } sort(al.begin(),al.end()); sort(op.begin(),op.end()); //for(int i=0;i<n;i++)cout<<al[i].a<<" "<<al[i].b<<" "<<al[i].sum<<"\n"; //for(int i=0;i<q;i++)cout<<op[i].x<<" "<<op[i].y<<" "<<op[i].z<<"\n"; int i=0; for(int j=0;j<q;j++){ while(i<n && al[i].sum>=op[j].z){ upd(0,al[i].a); upd(1,al[i].b); i++; } int q1=query(0,op[j].x-1); int q2=query(1,op[j].y-1); ans[op[j].id]=i-q1-q2; } for(int i=0;i<q;i++)cout<<ans[i]<<"\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...