求有几对ai+aj>bi+bj (i<j)
移项找规律:(ai-bi)+(aj-bj)>0,问题转化为求有几对ci=ai-bi,相加大于0
显然二分一下,如果是负数,找大于它的相反数的正数,否则加上后面个数。
const int N = 2e5 + 5;
int a[N],b;
vector<int> c;
int main()
{
ios::sync_with_stdio(false);cin.tie(nullptr);
int n;
while (cin >> n)
{
f(i, 1, n)cin >> a[i];
f(i, 1, n) { cin >> b;c.emplace_back(a[i] - b); }
ll ans = 0;
int k = 0;
sort(c.begin(), c.end());
for (auto i : c)
{
if(i<=0)ans += n - (upper_bound(c.begin()+k+1, c.end(), -i)-c.begin());//找有几个大于相反数的数
else ans += n - k - 1;
//debug(ans);
k++;
}
cout << ans << endl;
}
return 0;
}