Baidu star preliminary round (1) 1003 sequence transformation binary search, preliminary round 1003
#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;}