好久不做题,这样的题都不会做了
#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; }