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;
    }
  • 相关阅读:
    jQuery:一些小练习
    jQuery
    JavaWeb:笔记(三)
    JavaWeb:笔记(二)
    JavaWeb:笔记(一)
    JavaWeb:文件的上传下载
    JavaWeb:Listener
    基于RRT的机器人自主探索建图
    OpenNI2安装
    g2o初始化一些
  • 原文地址:https://www.cnblogs.com/smartljy/p/13431672.html
Copyright © 2011-2022 走看看