百度之星初赛(1) 1003 序列变换 二分搜索

来源:互联网 发布:实时数据监控 编辑:程序博客网 时间:2024/05/16 15:26
#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;}

0 0
原创粉丝点击