这么一道简单题,居然因为2次看错题目被卡住了。。。
二分一下就好。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=50050;
long long n,m,x;
long long p[MAXN];
bool judge(long long limit)
{
long long bef=x,i,dis;
for(i=0;i<n;i++)
{
dis=min(p[i]+limit,m-x)-max(bef,p[i]-limit);
if(dis>=0)
bef=max(bef,p[i]-limit)+(x<<1);
else
return 0;
}
return 1;
}
int main()
{
long long i,lef,rig,mid;
while(scanf("%lld%lld%lld",&n,&x,&m)!=EOF)
{
for(i=0;i<n;i++)
scanf("%lld",&p[i]);
if(2*n*x>m)
{
printf("-1\n");
continue;
}
lef=0;rig=m;
while(lef<=rig)
{
mid=(lef+rig)>>1;
if(judge(mid))
rig=mid-1;
else
lef=mid+1;
}
printf("%lld\n",lef);
}
}