dp进阶(二)(老师文档)

A 最长区间长度

给定一个n个数据的序列a1...an。连续数据之间没有大的跳跃 即对于每个1i <n,保证| ai + 1 - ai | 1

 

如果该区间范围内的最大值和最小值之间的差最大为1,则[LR]范围内的数据被认为是恒定的。即令M[LR]范围内的最大值,m[LR]范围内的最小值,如果M - m1,则范围[lr]为恒定的。

 

找出最长的恒定范围的长度。

 

输入:

输入的第一行包含一个整数n2n100000

第二行包含n个整数a1a2...an1ai100000)。

 

输出:

输出一个数字 - 给定序列的恒定范围的最大长度。

 

示例

输入:

5

1 2 3 3 2

输出

4

 

输入

11

5 4 5 5 6 7 8 8 8 7 6

输出

5

 

样例解释:

在第一个样例中,最长的恒定的范围是[25],其长度是4

 

在第二个样例中,有三个长度为4的恒定范围:[1,4][6,9][7,10];最大长度5的恒定范围是[6,10]


以下为老师的代码

#include <bits/stdc++.h>
using namespace std;

const int N=1e5+10;
int p[N];

int main(){
    int n,x,ans=0,l=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&x);
        l=max(l,p[x-2]);
        l=max(l,p[x+2]);
        ans=max(ans,i-l);
        p[x]=i;
    }
    printf("%d\n",ans);
    return 0;
}

膜拜大佬!@!@@@@

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值