zoukankan      html  css  js  c++  java
  • HDU 5805 NanoApe Loves Sequence

    处理出每个位置左边的最大值和右边的最大值。然后就可以o(1)计算去掉某位置的最大值了。

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<stack>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    const double pi=acos(-1.0),eps=1e-8;
    void File()
    {
        freopen("D:\in.txt","r",stdin);
        freopen("D:\out.txt","w",stdout);
    }
    inline int read()
    {
        char c = getchar();  while(!isdigit(c)) c = getchar();
        int x = 0;
        while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); }
        return x;
    }
    
    const int maxn=100000+10;
    int T,n,a[maxn],L[maxn],R[maxn];
    LL ans;
    
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            ans=0; memset(L,0,sizeof L); memset(R,0,sizeof R);
            scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]);
            for(int i=2;i<=n;i++) L[i]=max(L[i-1],abs(a[i]-a[i-1]));
            for(int i=n-1;i>=1;i--) R[i]=max(R[i+1],abs(a[i]-a[i+1]));
            for(int i=1;i<=n;i++)
            {
                if(i==1) ans=ans+R[2];
                else if(i==n) ans=ans+L[n-1];
                else ans=ans+max(L[i-1],max(R[i+1],abs(a[i-1]-a[i+1])));
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    linux command mktemp
    易经中时常会想起的句子
    判断NumLock键和CapsLock键是否被锁定
    获得虚拟键键码
    获取功能键
    捕获组合键
    模拟鼠标操作
    利用鼠标绘图
    使用鼠标拖放复制文本
    双击窗体是模拟键盘上的Tab键
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5747320.html
Copyright © 2011-2022 走看看