제출 #1190433

#제출 시각아이디문제언어결과실행 시간메모리
1190433boclobanchatExamination (JOI19_examination)C++20
0 / 100
291 ms7608 KiB
#include<bits/stdc++.h>
using namespace std;
#define ii pair<int,int>
#define fi first
#define se second
const int MAXN=1e5+5;
const int sqr=320;
const int INF=1e9;
struct query { int l,r,u,pos; };
bool comp(query a,query b) { if(a.l/sqr==b.l/sqr) return a.r<b.r;return a.l<b.l; }
int cnt[MAXN],block[MAXN/sqr+5],cc[MAXN],va[MAXN],vb[MAXN],vc[MAXN],ans[MAXN],F[MAXN];
ii A[MAXN],B[MAXN],C[MAXN];
query Q[MAXN];
void update(int i,int val)
{
	int a=(i-1)/sqr;
	block[a]+=val-cnt[i],cnt[i]=val;
}
int get(int i)
{
	int ans=0;
	while(i%sqr) ans+=cnt[i--];
	i=(i-1+sqr)/sqr-1;
	while(i>0) ans+=block[--i];
	return ans;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,q;
	cin>>n>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>A[i].fi>>A[i].se;
		A[i]={INF-A[i].fi,INF-A[i].se};
		va[i]=A[i].fi,vb[i]=A[i].se,vc[i]=A[i].fi+A[i].se-INF;
	}
	sort(va+1,va+n+1);
	sort(vb+1,vb+n+1);
	sort(vc+1,vc+n+1);
	for(int i=1;i<=n;i++)
	{
		int a=lower_bound(va+1,va+n+1,A[i].fi)-va;
		int b=lower_bound(vb+1,vb+n+1,A[i].se)-vb;
		int c=lower_bound(vc+1,vc+n+1,A[i].fi+A[i].se-INF)-vc;
		c+=F[c]++,B[i]={a,c},C[i]={b,c};
	}
	sort(B+1,B+n+1);
	sort(C+1,C+n+1);
	for(int i=1;i<=q;i++)
	{
		int a,b,c;
		cin>>a>>b>>c;
		a=INF-a,b=INF-b,c=INF-c;
		a=upper_bound(va+1,va+n+1,a)-va-1;
		b=upper_bound(vb+1,vb+n+1,b)-vb-1;
		c=upper_bound(vc+1,vc+n+1,c)-vc-1;
		Q[i]={a,b,c,i};
	}
	sort(Q+1,Q+q+1,comp);
	int l=0,r=0;
	for(int i=1;i<=q;i++)
	{
		while(l<Q[i].l) l++,update(B[l].se,++cc[B[l].se]==2);
		while(l>Q[i].l) update(B[l].se,--cc[B[l].se]==2),l--;
		while(r<Q[i].r) r++,update(C[r].se,++cc[C[r].se]==2);
		while(r>Q[i].r) update(C[r].se,--cc[C[r].se]==2),r--;
		ans[Q[i].pos]=get(Q[i].u);
	}
	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...