92分求助
  • 板块P1102 A-B 数对
  • 楼主hhy8399
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/12/9 19:13
  • 上次更新2024/12/9 20:00:41
查看原帖
92分求助
1179906
hhy8399楼主2024/12/9 19:13
#include <bits/stdc++.h>
using namespace std;

#define int long long

const int MAXN = 1e6 + 10;

int n,b,m,c,ans;
int a[MAXN];
map <int,int> mp;

int check(int k) {
//	printf("%d\n",k);
//	int times = 0; 
//	freopen("p1002_3.in","r",stdin);
	int l = 0,r = m + 1;
	while(l + 1 != r) {
//		times ++;
		int mid = (l + r) >> 1;
		if(k - a[mid] <= c) {
			r = mid;
		}
		else {
			l = mid;
		}
//		printf("times = %d ; r = %d ; l = %d ; mid = %d\n",times,r,l,mid);
	}
	return r;
}

signed main() {
	scanf("%d %d",&n,&c);
	for(int i = 1;i <= n;i++) {
		scanf("%d",&b);
		if(!mp[b]) {
			m ++;
			a[m] = b;
		}
		mp[b] ++;
	}
/*	sort(a + 1,a + m + 1);
	printf("%d\n",m);
	for(int i = 1;i <= m;i++) {
		printf("%d ",a[i]);
	}
	*/
	sort(a + 1,a + m + 1);
	for(int i = 1;i <= m;i++) {
		int pos = check(a[i]);
		if(a[i] - a[pos] == c) {
			ans += mp[a[i]] * mp[a[pos]];
		}
	}
	printf("%d\n",ans);
	return 0;
}
2024/12/9 19:13
加载中...