zoukankan      html  css  js  c++  java
  • codeforces 442C C. Artem and Array(有深度的模拟)

    题目

    感谢JLGG的指导!

    思路:

    //把数据转换成一条折线,发现有凸有凹

    //有凹点,去掉并加上两边的最小值
    //无凹点,直接加上前(n-2)个的和(升序)
    //数据太大,要64位
    //判断凹与否,若一边等于,一边大于,那中间这个也算是凹进去的,所以判断时要加上等于

    //有凹点,去掉并加上两边的最小值
    //无凹点,直接加上前(n-2)个的和(升序)
    //数据太大,要64位
    //判断凹与否,若一边等于,一边大于,那中间这个也算是凹进去的,所以判断时要加上等于
    
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    #define ll long long 
    int n,a[500010],b[500010];
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
            }
            ll ans=0;
            if(n>2)
            {
                int id=0;
                b[id++]=a[0];
                b[id++]=a[1];
                for(int i=2;i<n;i++)
                {
                    while(b[id-1]<=b[id-2]&&b[id-1]<=a[i])//难道是因为没有等于的缘故
                    {
                        ans+=min(b[id-2],a[i]);
                        id--;
                    }
                    b[id++]=a[i];
                }
                sort(b,b+id);
                for(int i=0;i<id-2;i++)
                    ans+=b[i];
            }
            printf("%I64d
    ",ans);
        }
        return 0;
    }
    View Code
    一道又一道,好高兴!
  • 相关阅读:
    校园导游图的课程设计(三)
    校园导游图的课程设计(二)
    vim中Mapping already in use: "<LocalLeader>is", mode "n"错误解决的方法解释
    fedora 的截图快捷键
    校园导游图的课程设计(一)
    theos(一)
    脱壳
    初识Mach-O
    Cycript(二)
    Cycript(一)
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3885887.html
Copyright © 2011-2022 走看看