二分 加一下小判断
#include<stdio.h>
#include<queue>
#include<string.h>
#include<algorithm>
#include<map>
#define ll long long
using namespace std;
int a[2000000];
int a1[2000000];
int n;
int j(int t)
{
memcpy(a1,a,sizeof(a));
for(int i=1;i<=n;i++)
{
if(a1[i]>a1[i-1])
a1[i]=max(a1[i-1]+1,a1[i]-t);
else {
if(a1[i]+t<=a1[i-1]) return 0;
a1[i]=a1[i-1]+1;
}
}
return 1;
}
int main()
{
int t;
int jj=0;
scanf("%d",&t);
while(t--)
{
int ans;
jj++;
scanf("%d",&n);
a[0]=-10000000;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int l=0,r=10000000;
while(l<=r)
{
int mid=(r+l)>>1;
if(j(mid))
{//printf("%d\n",mid);
ans=mid;
r=mid-1;
}
else l=mid+1;
}
printf("Case #%d:\n",jj);
printf("%d\n",ans);
}
}