제출 #378823

#제출 시각아이디문제언어결과실행 시간메모리
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...