ACdream 1127 Base Station 数据结构
  VrZI4Uwu8BR1 2023年11月02日 89 0



#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
#define N 100010

int in[N];
int ans[N];
int cnt;
int Lowbit(int t)  
{  
    return t&(-t);  
}  
int Sum(int p)  
{  
    int sum=0;  
    while(p>0)  
    {  
        sum+=in[p];  
        p-=Lowbit(p);  
    }  
    return sum;  
}  
void add(int p,int num)  
{  
    while(p<=cnt)  
    {  
        in[p]+=num;  
        p+=Lowbit(p);  
    }  
}  

struct node
{
	ll x,y;
}p[N];
bool cmp(node a,node b)
{
	return a.x>b.x;
}
ll yy[N];
struct query
{
	ll r1,r2;
	int index;
}q[N];
bool cmp1(query a,query b)
{
	return a.r1>b.r1;
}
int main()
{
	ll x1,y1,x2,y2,i,j,k;
	while(scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2)!=EOF)
	{
		memset(in,0,sizeof(in));
		int n,m;
		scanf("%d",&n);
		for(i=0;i<n;i++)
		{
			ll a,b;
			scanf("%lld%lld",&a,&b);
			p[i].x=(a-x1)*(a-x1)+(b-y1)*(b-y1);
			p[i].y=(a-x2)*(a-x2)+(b-y2)*(b-y2);
			yy[i]=p[i].y;
		}
		sort(p,p+n,cmp);
		sort(yy,yy+n);
		cnt=unique(yy,yy+n)-yy;
		scanf("%d",&m);
		for(i=0;i<m;i++)
		{
			ll a,b;
			scanf("%lld%lld",&a,&b);
			q[i].r1=a*a;
			q[i].r2=b*b;
			q[i].index=i;
		}
		sort(q,q+m,cmp1);

		j=0;
		for(i=0;i<m;i++)
		{
			while(j<n && p[j].x>=q[i].r1)
			{
				k=lower_bound(yy,yy+cnt,p[j].y)-yy+1;
				add(k,1);
				j++;
			}
			k=lower_bound(yy,yy+cnt,q[i].r2)-yy+1;
			ans[q[i].index]=Sum(cnt)-Sum(k-1);
		}
		for(i=0;i<m;i++)
			printf("%d\n",ans[i]);
	}
}




【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
VrZI4Uwu8BR1