이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |