Approximating a Constant Range

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Approximating a Constant Range相关的知识,希望对你有一定的参考价值。

原题地址:http://codeforces.com/contest/602/problem/B

 

题意
给定一个序列,满足abs(a[i+1]-a[i])<=1
要求找到最长的一个子序列[l,r]满足序列中最大值max和最小值之差小于等于1

题解
要求找到题意要求的最长序列,对应的序列有什么特征呢?
假如序列起点终点是l,r,那么应该有abs(A[l-1]-A[r])==2
所以我们枚举终点,对应的起点可以用一个p数组O(1)维护和查询
同时,要求这个序列中A[r]-1和A[r]+1不能同时出现,也可以用p数组实现判断

p[x]:x出现的最后位置
也就是上一个x出现的下标
有的时候因为x过大的缘故,需要离散化或者用map代替数组实现这一功能

 

#include<bits/stdc++.h>

using namespace std;
const int maxn=1e5;

int p[maxn+10];
int arr[maxn+5];

int main(void)
{
    #ifdef ex1
    freopen ("in.txt","r",stdin);
    #endif
    
    int n;
    scanf("%d",&n);
    
    for (int i=1;i<=n;++i)
    {
        scanf("%d",&arr[i]);
    }
    
    int ans=0;
    for (int i=1;i<=n;++i)
    {
        int x=arr[i];
        p[x+2]=i;
        
        int k=max(p[x+4],p[x]);
        if (p[x+3]>k && p[x+1]>k)
        {
            ans=max(ans,i-min(p[x+3],p[x+1]));
        }
        else
        {
            ans=max(ans,i-k);
        }
    }
    
    printf("%d\n",ans);
    
} 

 

以上是关于Approximating a Constant Range的主要内容,如果未能解决你的问题,请参考以下文章

[Information Theory] L14: Approximating Probability Distributions (IV): Variational Methods

Java中定义常量(Constant)

expected identifier before numeric constant

struts2中的constant配置详解

跨平台渲染框架尝试 - constant buffer的管理

极智AI | 讲解 TensorRT Constant 算子