为啥我90分,第二点爆空间
#include<bits/stdc++.h>
using namespace std;
int h[500009];
int n,m,a,b;
int ans=-1;
int q;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
int check(int x)
{
int o=0;
for(int i=0;i<=n;)
{
int j=i;
int k=h[j];
while(1)
{
i++;
if(h[i]-h[j]<x)
{
o++;
}
else break;
if(o>m)
return 0;
}
}
return 1;
}
void go(int l,int r)
{
int mid=(l+r)/2;
if(check(mid))
{
if(check(mid+1)==0)
{
cout<<mid;
exit;
}
else
go(mid,r);
}
else
{
go(l,mid);
}
}
int main()
{
// freopen("cuttree.in","r",stdin);
// freopen("cuttree.out","w",stdout);
q=read();
n=read();
m=read();
h[0]=0;
h[n+1]=q;
for(int i=1;i<=n;i++)
{
h[i]=read();
}
go(1,q);
return 0;
}
DL赐教!