• 单调栈题目总结


    把单调栈的题目总结在一起吧QAQ——记得加上这个分组的上一篇(第一篇

    bzoj 1657: [Usaco2006 Mar]Mooo 奶牛的歌声

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    using namespace std;
    const int M=50007;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int n,h[M],v[M];
    int st[M],top,s[M],ans;
    int main()
    {
        n=read();
        for(int i=1;i<=n;i++) h[i]=read(),v[i]=read();
        for(int i=1;i<=n;i++){
            while(top&&h[st[top]]<h[i]) s[i]+=v[st[top--]];
            st[++top]=i;
        }
        top=0;
        for(int i=n;i;i--){
            while(top&&h[st[top]]<h[i]) s[i]+=v[st[top--]];
            st[++top]=i;
        }
        for(int i=1;i<=n;i++) ans=max(ans,s[i]);
        printf("%d
    ",ans);
        return 0;
    }
    View Code

     bzoj 1660: [Usaco2006 Nov]Bad Hair Day 乱发节

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #define LL long long
    using namespace std;
    const int M=1e5+7;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int h[M],n;
    LL ans;
    int st[M],top;
    int main()
    {
        n=read();
        for(int i=1;i<=n;i++) h[i]=read();
        for(int i=1;i<=n;i++){
            while(top&&h[st[top]]<=h[i]) top--;
            ans+=top; st[++top]=i;
        }printf("%lld
    ",ans);
        return 0;
    }
    View Code

     bzoj 1345: [Baltic2007]序列问题Sequence

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #define LL long long
    using namespace std;
    const int M=1e5+7,inf=0x7f7f7f7f;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int n,st[M],top;
    LL ans,k;
    int main()
    {
        n=read(); st[0]=inf;
        for(int i=1;i<=n;i++){
            k=read();
            while(top&&st[top]<=k){
                if(k<st[top-1]) ans+=k;
                else ans+=st[top-1];
                top--;
            }
            st[++top]=k;
        }
        while(top>1) ans+=st[--top];
        printf("%lld
    ",ans); 
        return 0;
    }
    View Code
  • 相关阅读:
    T-Sql语法:行转列(pivot)和列转行(unpivot)
    T-Sql语法:GROUP BY子句GROUPING SETS、CUBE、ROLLUP
    Asp.net使用Plupload上传组件详解
    form标签属性enctype之multipart/form-data请求详解
    基于Owin Oauth2构建授权服务器
    AutoFac使用~IOC容器(DIP,IOC,DI)
    第二节:模型(Models)和管理后台(Admin site)
    第三节:视图(Views)和模板(Templates)
    THINKPHP 3.2 PHP SFTP上传下载 代码实现方法
    Linux 上导出导入sql文件到服务器命令
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7417271.html
Copyright © 2020-2023  润新知