Submission #978084

#TimeUsernameProblemLanguageResultExecution timeMemory
978084happy_nodeExamination (JOI19_examination)C++17
100 / 100
815 ms55788 KiB
#include <bits/stdc++.h>
using namespace std;

const int MX=1e6+5;
int N,Q;
int S[MX],T[MX], X[MX], Y[MX], Z[MX], ans[MX];

struct fenwick {
	int t[MX];

	void upd(int pos, int val) {
		for(int i=pos;i<MX;i+=i&-i) t[i]+=val;
	}

	int que(int pos) {
		int res=0;
		for(int i=pos;i>0;i-=i&-i) res+=t[i];
		return res;
	}
} ft, tt;

map<int,int> id;

int main() {
	cin.tie(0); ios_base::sync_with_stdio(0);

	cin>>N>>Q;

	for(int i=1;i<=N;i++) cin>>S[i]>>T[i];
	for(int i=1;i<=Q;i++) {
		cin>>X[i]>>Y[i]>>Z[i];
		Z[i]=max(Z[i],X[i]+Y[i]);
	}

	map<int,int> id;
	for(int i=1;i<=N;i++) {
		id[S[i]]=0;
		id[T[i]]=0;
		id[S[i]+T[i]]=0;
	}
	for(int i=1;i<=Q;i++) {
		id[X[i]]=0;
		id[Y[i]]=0;
		id[Z[i]]=0;
	}

	int z=1;
	for(auto &[x,y]:id) y=z++;

	vector<array<int,4>> v;
	for(int i=1;i<=N;i++) 
		v.push_back({S[i]+T[i],S[i],T[i],MX});
	for(int i=1;i<=Q;i++) 
		v.push_back({Z[i],X[i],Y[i],i});

	sort(v.rbegin(),v.rend());

	int cnt=0;
	for(auto [s,x,y,i]:v) {
		if(i==MX) {
			cnt+=1;
			ft.upd(id[x],1);
			tt.upd(id[y],1);
		} else {
			ans[i]=cnt-ft.que(id[x]-1)-tt.que(id[y]-1);
		}
	}

	for(int i=1;i<=Q;i++) {
		cout<<ans[i]<<'\n';
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...