现在的位置: 首页 > 综合 > 正文

ACdream 1127 Base Station

2019年02月27日 ⁄ 综合 ⁄ 共 1274字 ⁄ 字号 评论关闭

好久不做题,这样的题都不会做了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
using namespace std;
struct node
{
    long long x,y;
    int num;
}p[111111],q[111111];
int c[211111];
int ans[111111];
int t,n,m;
long long ax,ay,bx,by;
vector<long long>v;
map<long long,int>po;
bool cmp(node a,node b)
{
    return a.x>b.x;
}
int lowbit(int i)
{
    return i&(-i);
}
void add(int x,int val)
{
    for(int i=x;i<=200000;i+=lowbit(i))c[i]+=val;
}
int sum(int x)
{
    int s=0;
    for(int i=x;i>0;i-=lowbit(i))s+=c[i];
    return s;
}
int main()
{
    while(scanf("%lld%lld%lld%lld",&ax,&ay,&bx,&by)!=EOF)
    {
        v.clear();
        po.clear();
        memset(c,0,sizeof(c));
        scanf("%d",&n);
        long long xx,yy;
        for(int i=0;i<n;i++)
        {
            scanf("%lld%lld",&xx,&yy);
            p[i].x=(xx-ax)*(xx-ax)+(yy-ay)*(yy-ay);
            p[i].y=(xx-bx)*(xx-bx)+(yy-by)*(yy-by);
            v.push_back(p[i].y);
        }
        sort(p,p+n,cmp);
        scanf("%d",&m);
        long long r1,r2;
        for(int i=0;i<m;i++)
        {
            scanf("%lld%lld",&r1,&r2);
            q[i].x=r1*r1;
            q[i].y=r2*r2;
            q[i].num=i;
            v.push_back(q[i].y);
        }
        sort(q,q+m,cmp);
        sort(v.begin(),v.end());
        v.erase(unique(v.begin(),v.end()),v.end());
        int size=v.size();
        for(int i=0;i<size;i++)po[v[i]]=i+1;
        int temp=0;
        for(int i=0;i<m;i++)
        {
            while(temp<n&&p[temp].x>=q[i].x)
            {
                add(po[p[temp].y],1);
                temp++;
            }
            ans[q[i].num]=sum(200000)-sum(po[q[i].y]-1);
        }
        for(int i=0;i<m;i++)printf("%d\n",ans[i]);
    }
    return 0;
}

抱歉!评论已关闭.