Codeforces Round 1156 C 二分答案

 题目

取前K小,然后跟后K大去比较。

4 3

1 4 5 7

#include <bits/stdc++.h>
using namespace std;
int a[200005];
int book[200005];
int n,z;
int solve(int m){
	for(int i=0;n-m+i<n;i++){
		if(a[n-m+i]-a[i]<z){
			return 0;
		}
	}
	return 1;
}
int main()
{
	scanf("%d %d",&n,&z);
	for(int i=0;i<n;i++)scanf("%d",&a[i]);
	sort(a,a+n);
	int ans = 0;
	int l = 0,r = n/2;
	while(l<=r){
		int mid = (l+r)/2;
		if(solve(mid)){
			l = mid+1;
			ans = mid;
		}else{
			r = mid-1;
		}
	}
	printf("%d",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41603898/article/details/90719515