题意:
。。。
思路:
贪心check:
因为首尾是不能动的,所以从第二个点开始check,看它与前面的点距离是否满足条件,不满足就将它删除。
int check(int limi) {
int cnt = 0, last = 0;
rep(i, 1, n+1) {
if (a[i]-a[last]<limi){
if (cnt == m || i == n+1) return 0;
++cnt;
}
else {
//printf("from %d to %d\n", last, i);
last = i;
}
}
return 1;
}
int solve() {
int l = 0, r = L+1;
while (l<r-1) {
int mid = l+((r-l)>>1);
//cout << "check " << mid << ": \n";
if (!check(mid)) r = mid;
else l = mid;
}
return l;
}