#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e6+10,inf=0x3f3f3f;
int a[N];
int d[N];
int n,m,s;
int l=inf ,r;
bool check(int x)//找最小值——转化为有至多n+1-m个区间的值比x大
{
int cnt = 0;
int sum = 0 ;
for (int i = 1; i <= n+1; )
{
if(d[i]>=x)
{
cnt++;
i++;
}else
{
while(sum<x)
{
sum+=d[i++];
}
sum=0;cnt++;
}
}
if(cnt>=n+1-m) return true;
return false;
}
int main()
{
scanf("%d%d%d", &s, &n,&m);
//移走一个石头 相当于合并数组d的两个区间 m次合并后就会有n+1-m个区间 所以说至多有n+1-m个区间
for (int i = 1; i <= n; i ++ )
{
scanf("%d", &a[i]);
d[i]=a[i]-a[i-1];
l=min(l,d[i]),r+=d[i];
}
d[n+1]=s-a[n];
l=min(d[n+1],l),r+=d[n+1];
int ans;
while(l<=r)
{
int mid = l+r>>1;
if(check(mid)) l = mid+1,ans=mid;
else r= mid-1;
}
printf("%d",ans);
}
hack数据是8 3 1 2 4 7 正确输出是 2 蒟蒻的输出是 3 求大佬指点 这个算法思路哪里错了