92分求助看不出哪里有问题,思路都是一样的
  • 板块P1102 A-B 数对
  • 楼主ACE1537
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/5 12:36
  • 上次更新2023/11/5 14:51:33
查看原帖
92分求助看不出哪里有问题,思路都是一样的
1095989
ACE1537楼主2023/11/5 12:36
#include <iostream>
#include<algorithm>

using namespace std;

const int N = 10000010;

int a[N];
int m, n;
int l, r;

int find1(int x)          //查询x出现的第一个位置
{
	l = 0, r = n - 1;
	while (l < r)
	{
		int mid = l + r >> 1;
		if (a[mid] >= x) r = mid;
		else l = mid + 1;
	}
	if (a[l] == x) return l;
	else return 0;      //排除x不存在的情况
}

int find2(int x)       //查询x + 1第一次出现的位置
{
	l = 0, r = n - 1;
	while (l < r)
	{
		int mid = l + r + 1>> 1;
		if (a[mid] <= x) l = mid;
		else r = mid - 1;
	}
	if (a[l] == x) return l + 1;
	else return 0;
}

int main()
{
	int ans = 0;

	scanf("%d%d", &n, &m);

	for (int i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}

	sort(a ,a + n);
	

	for (int i = 0; i < n; i++)
	{
	    ans += find2(a[i] + m) - find1(a[i] + m);    //查找比每个数大m的数字是否存在存在就加上不存在会加0即不变。
	}

	printf("%d", ans);
}
2023/11/5 12:36
加载中...