#include <cstdio>
#include <iostream>
#include <cstring>
#include <set>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
int n;
int a[100015];
int b[100015];
int fun(int m){
for(int i = 0;i < n;i++){
if(i == 0){
b[i] = a[i]-m;
}
else{
if(a[i]+m < b[i-1]+1){
return 0;
}
else{
if(a[i]-m < b[i-1]+1){
b[i] = b[i-1] + 1;
}
else
{
b[i] = a[i] - m;
}
}
}
}
return 1;
}
int main(){
int t;
cin >> t;
for(int kcase = 1; kcase <= t;kcase ++){
scanf("%d",&n);
int maxn = 0;
for(int i = 0;i < n;i++){
scanf("%d",&a[i]);
if(a[i] > maxn){
maxn = a[i];
}
}
int l = 0;
int r = 1000000+1;
memset(b,0,sizeof(b));
while(l < r){
int m = l + (r-l)/2;
if(fun(m)){
r = m;
}
else{
l = m + 1;
}
}
printf("Case #%d:\n",kcase);
printf("%d\n",l);
}
return 0;
}
百度之星初赛(1) 1003 序列变换 二分搜索
最新推荐文章于 2017-03-05 17:17:03 发布