这里的相离竟然不包括内含….坑….
num=n,sum=0;
num是代表现在还有多少个圆没有出现过。
sum代表外离的对数。
那么每次
直接遇圆左就num–;
圆右就sum+=num;
处理完,即为答案
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int read(){int ret=0;char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) ret=ret*10+ch-'0';return ret;}
struct t
{
int a,b;
}p[100050];
bool cmp(t x,t y)
{
if(x.a!=y.a)
return x.a<y.a;
return x.b<y.b;
}
int main()
{
int n=read(),x,r;
n<<=1;
for(int i=0;i<n;i++)
{
x=read(),r=read();
p[i].b=0;
p[i++].a=x-r;
p[i].b=1;
p[i].a=x+r;
}
sort(p,p+n,cmp);
int sum=0,num=n>>1;
for(int i=0;i<n;i++)
if(p[i].b) sum+=num;
else num--;
printf("%d\n",sum);
}