我在想用两个函数分别找到区间的两个边界,但全报错这是为什么
  • 板块P1102 A-B 数对
  • 楼主Fzl2004
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/25 11:12
  • 上次更新2024/8/25 14:10:32
查看原帖
我在想用两个函数分别找到区间的两个边界,但全报错这是为什么
1404134
Fzl2004楼主2024/8/25 11:12
#include<bits/stdc++.h>
#define ll long long

using namespace std;

const int N = 2e5 + 10;

int b_search1(int *nums, int target, int s, int e){
	int min = s, max = e;
	int mid;
	while(min<max){
		mid = (min + max) /  2;
		if(nums[mid]>target)max = mid - 1;
		else if(nums[mid]<target) min = mid + 1;
		else{
			while(min<max){
				if(nums[mid]==target) max=mid;
				else min = mid+1;
				mid = (min + max) / 2;
			}
			return mid+1;
		}
	}
	return 0;
}

int b_search2(int *nums, int target, int s, int e){
	int min = s, max = e;
	int mid;
	while(min<max){
		mid = (min + max )  /  2;
		if(nums[mid]>target)max = mid - 1;
		else if(nums[mid]<target) min = mid + 1;
		else {
			while(min<max){
				if(nums[mid]==target) min=mid;
				else max = mid-1;
				mid = (min + max + 1) / 2;
			}
			return mid+1;
		}
	}
	return 0;
}

int main(){
	int n , c;
	int m[N];
	cin>>n>>c;
	for(int i = 0; i < n; i++){
		cin>>m[i];
	}
	sort(m,m+n);
	ll count=0;
	for(int i = 0; i < n - 1; i++){
		int b = m[i];
		int a = b + c;
		int x = b_search1(m, a, 0, n);
		int y = b_search2(m, a, 0, n);
		if(x&&y)count = count+(x-y+1);	
	}
	cout<<count;
	return 0;
}
2024/8/25 11:12
加载中...