Codeforces 1324D. Pair of Topics

Description

The next lecture in a high school requires two topics to be discussed. The i-th topic is interesting by ai units for the teacher and by bi units for the students.

The pair of topics i and j (i<j) is called good if ai+aj>bi+bj (i.e. it is more interesting for the teacher).

Your task is to find the number of good pairs of topics.

Input

The first line of the input contains one integer n (2≤n≤2⋅105) — the number of topics.

The second line of the input contains n integers a1,a2,…,an (1≤ai≤109), where ai is the interestingness of the i-th topic for the teacher.

The third line of the input contains n integers b1,b2,…,bn (1≤bi≤109), where bi is the interestingness of the i-th topic for the students.

Output

Print one integer — the number of good pairs of topic.

Examples
input

5
4 8 2 6 2
4 5 4 1 3

output

7

input

4
1 3 2 4
1 3 2 4

output

0

题目大意

有n个主题,第i个主题有ai个老师,bi个学生
需要选择两个主题,这两个主题的老师数大于学生数
也就是说选择两个下标保证 ai+aj>bi+bj
输出可行的选择种类数

思路

将不等式进行变换
ai+aj>bi+bj --> (ai-bi)+(aj-bj)>0
将数组c排序(ci=ai-bj)
从左到右遍历数组c,当遍历到i点时可以找到最右边与c[i]相加小于等于0的点j,那j后的点与c[i]相加都满足

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=2e5+5;
int a[maxn],b[maxn],c[maxn];
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)scanf("%d",&a[i]);
	for(int i=1;i<=n;++i)scanf("%d",&b[i]);
	for(int i=1;i<=n;++i)c[i]=a[i]-b[i];
	sort(c+1,c+n+1);
	ll ans=0;
	for(int i=1,j=n;i<=n;++i){
		while(j>i&&c[i]+c[j]>0){
			--j;
		}
		ans+=n-max(i,j);
	}
	printf("%lld\n",ans);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值