zoukankan      html  css  js  c++  java
  • Codeforces Round #FF (Div. 1)——A贪心——DZY Loves Sequences

    DZY has a sequence a, consisting of n integers.

    We'll call a sequence ai, ai + 1, ..., aj (1 ≤ i ≤ j ≤ n) a subsegment of the sequence a. The value (j - i + 1) denotes the length of the subsegment.

    Your task is to find the longest subsegment of a, such that it is possible to change at most one number (change one number to any integer you want) from the subsegment to make the subsegment strictly increasing.

    You only need to output the length of the subsegment you find.

    Input

    The first line contains integer n (1 ≤ n ≤ 105). The next line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109).

    Output

    In a single line print the answer to the problem — the maximum length of the required subsegment.

    Sample test(s)
    input
    6
    7 2 3 1 5 6
    output
    5
    Note

    You can choose subsegment a2, a3, a4, a5, a6 and change its 3rd element (that is a4) to 4.

    /*
        大意:改一个数,使得递增最长
        对每一个数求出L[i],R[i],枚举每一个i的改变,如果a[i+1] - a[i-1] >= 2的时候说明可以连在一起,特判搞a[1],和a[n]的情况以及只有1个数的情况
    
    */
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int MAX = 110000;
    long long  a[MAX];
    int L[MAX], R[MAX];
    int main()
    {
        int n;
        while(~scanf("%d", &n)){
            memset(a, 0, sizeof(a));
            for(int i = 1; i <= n ;i++){
                scanf("%lld", &a[i]);
            }
            for(int i = 0 ; i <= MAX; i++)
                L[i] = R[i] = 1;
           for(int i = 2; i <= n; i++){
                if(a[i] > a[i-1])
                    L[i] = L[i-1] + 1;
                else L[i] = 1;
            }
        //   for(int i = 1; i <= n ; i++)
        //      printf("%d ",L[i]);
            for(int i = n - 1; i >= 1; i--){
                if(a[i] < a[i+1])
                    R[i] = R[i+1] + 1;
                else R[i] = 1;
            }
            
            int max1 = max(R[1], L[n]);
            if(n >=2 ) max1 = max(max1, max(R[2] + 1, L[n-1] + 1));
            int max2 = 0;
            for(int i = 2; i <= n - 1 ; i++){
                if(a[i+1] - a[i-1] >= 2) 
                    max1 = max(R[i+1] + L[i-1] + 1, max1);
                max2 = max(R[i+1] + 1, L[i-1] + 1);
                max1 = max(max1, max2);
            }
            printf("%d
    ", max1);
        }
        return 0;
    }
    

      

  • 相关阅读:
    javascript和jquery模拟select框
    CSS使用菱形◆制作气泡对话框(兼容IE6 IE9)
    给网站添加显示在标签页上的小图标
    mysql设置utf8_unicode_ci字符集php页面输出??乱码的解决方法
    推荐一个学习的站
    ubuntu 12.04 安装 nginx+php+mysql web服务器
    PHP解决[function.filegetcontents]: failed to open stream: HTTP request failed!
    svn 操作命令
    svn 端口查看
    php函数parse_url()
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4655318.html
Copyright © 2011-2022 走看看