zoukankan      html  css  js  c++  java
  • YbtOj练习:贪心3 出栈序列

    一开始想用一个堆来维护最大值,不仅调了半天而且还会TLE。。。

    最后发现只要预处理最大值即可。

    对于任何时刻的栈顶,只要尚未入栈的数当中没有比它大的,那么它就是最优的,否则需要继续入栈。

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+5,inf=0x3f3f3f3f;
    int n,a[N],output[N],cnt,maxa[N],top,Stack[N];
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        int maxd=0;
        for(int i=n;i;i--)
        {maxd=max(maxd,a[i]);
            maxa[i]=maxd;
            
        }
    //    cout<<"MAXN: "<<maxa[10]<<endl;
        Stack[++top]=a[1];
        int now=2;
        while(top)
        {
        //    printf("%d %d
    ",Stack[top],a[now]);
            while(top&&Stack[top]>maxa[now]) //能写while的地方尽量不要写if
            output[++cnt]=Stack[top--];
            if(now<=n) Stack[++top]=a[now++];
            //if(Stack[top]==8) cout<<now<<endl;
        }
        for(int i=1;i<=cnt;i++) printf("%d ",output[i]);
        return 0;
    }
  • 相关阅读:
    学习笔记——Maven 如何处理传递性依赖
    gitlab 部署
    jenkins部署
    python 使用json格式转换
    php加载memcache
    centos6.5 apache+tomcat结合 负载均衡
    linux部署tomcat
    linux安装java环境
    kickstart安装
    cobbler部署
  • 原文地址:https://www.cnblogs.com/smartljy/p/13431672.html
Copyright © 2011-2022 走看看