zoukankan      html  css  js  c++  java
  • [ 10.08 ]CF每日一题系列—— 602B

    Description:
      一个数组,保证相邻两个元素值得差小于1,问题,最大值和最小值的差 < 1的区间长度最长是多少

    Solution:
      还是卡了一下,本来以为是模拟就好了,但是卡时间,想来想去最后还是忽略了一个地方,就是它的保证,相邻元素值得差小于1,就保证了这个序列得变化是以1或0为单位相邻变化的,所以不可能出现5 4 6,所以我们考虑一个数字x的时候只要去找出现的位置就好,我们要找的可能区间有x 和 x + 1区间或者x 和 x - 1区间,所以我们看一下上一个x - 1 出现的位置和x + 1 出现的位置在哪,因为他俩不能共存,如果x - 1出现的位置靠后,我们要计算的就是 x和x-1区间的长度,要看 (x - 2)出现的位置和x + 1出现位置的最大值,为其限制,反之亦然,用一个dp数组维护就好了

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #define inf ( 1 << 28 )
    using namespace std;
    const int maxn = 1e5 + 1e3;
    int x;
    int dp[maxn];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            memset(dp,0,sizeof(dp));
            int ans = 0;
            for(int i = 1;i <= n;i++)
            {
                scanf("%d",&x);
                if(dp[x - 1] > dp[x + 1])ans = max(ans,i - max(dp[x + 1],dp[x - 2]));
                else ans = max(ans,i - max(dp[x+2],dp[x-1]));
                dp[x] = i;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    
  • 相关阅读:
    【C语言学习】-08 指针
    【C语言学习】-07 结构体
    【C语言学习】-06 函数
    百度地图添加大头针和视图
    ios8中修改的 推送和地图
    ios 有关设备信息
    详解Objective-C runtime
    IOS7 ~ Xcode5 制作 framework
    IOS 取消表格单元格 TableViewCell 去掉高亮状态 点击Cell取消选择状态
    验证码设计(转)
  • 原文地址:https://www.cnblogs.com/DF-yimeng/p/9756162.html
Copyright © 2011-2022 走看看