#4对了 8分
  • 板块P1102 A-B 数对
  • 楼主RaymondA
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/27 09:27
  • 上次更新2024/4/27 11:33:43
查看原帖
#4对了 8分
1006046
RaymondA楼主2024/4/27 09:27
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 100;
int a[maxn];
long long n, c, t1, t2, sum = 0;
int ef1(int l, int r, int x){
	int ans = -1;
	while(l <= r){
		int mid = l + (r - l) / 2;
		if(a[mid] == x){
			ans = mid;
			r = mid - 1;
		}
		if(a[mid] < x) l = mid + 1;
		else r = mid - 1;
	}
	return ans;
}
int ef2(int l, int r, int x){
	int ans = -1;
	while(l <= r){
		int mid = l + (r - l) / 2;
		if(a[mid] == x){
			ans = mid;
			l = mid + 1;
		}
		if(a[mid] < x) l = mid + 1;
		else r = mid - 1;
	}
	return ans;
}
int main(){
	cin >> n >> c;
	for(int i = 1; i <= n; i++){
		cin >> a[i];
	}
	sort(a + 1, a + n + 1);
	for(int i = 1; i <= n; i++){
		t1 = ef1(1, n, a[i] + c);
		t2 = ef2(1, n, a[i] + c);
		if(t1 != -1 && t2 != -1) sum += t1 - t2 + 1;
	}
	cout << sum;
	return 0;
}
2024/4/27 09:27
加载中...