
水题
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1e5;
int arr[MAXN];
int ans = 0;
int N, M;
bool find(int len)
{
int rit = 1, ritv = arr[0] + len;
for(int i = 0; i < N; i++)
{
if(arr[i] >= ritv)
{
rit ++;
ritv = arr[i] + len;
}
if(rit == M)
return true;
}
return false;
}
void bsearch(int lst)
{
int fst = 1;
int mid = (fst + lst) / 2;
while(fst <= lst)
{
mid = (fst + lst) / 2;
if(find(mid))
{
ans = mid;
fst = mid + 1;
}
else
lst = mid - 1;
}
cout<<ans<<endl;
}
int main()
{
cin>>N>>M;
for(int i = 0; i < N; i++)
cin>>arr[i];
sort(arr, arr + N);
bsearch(arr[N - 1]);
return 0;
}
本文介绍了一种使用C++实现的二分查找算法,该算法用于在一个已排序的整数数组中找到使得区间数量等于指定值的最大长度。通过递归地调整搜索范围,算法能够高效地解决问题。
391

被折叠的 条评论
为什么被折叠?



