zoukankan      html  css  js  c++  java
  • 问题 A: [Usaco2006 Mar]Mooo 奶牛的歌声

    几个月前在学校zxr dalao讲过单调栈,所以对于单调栈还是有一些了解,这道题根据题意,声音只能被身高大于它的奶牛听见,也就是说,每一个奶牛只能听见身高比他矮的奶牛的声音。

    所以我们需要维护一个单调递减的单调栈,遇到一个比它高的奶牛就将其弹出栈,而那头高的奶牛听到的声音就是被弹出栈的奶牛声音的总和。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+7;
    int n;
    int h[maxn];
    int v[maxn];
    int sta[maxn];
    int ans[maxn];
    int top;
    int maxx;
    void dandiaozhan()
    {
        for(int i=1;i<=n;i++)
        {
            while(top&&h[i]>h[sta[top]])
            {
                ans[i]+=v[sta[top]];
                top--;
            }
            sta[++top]=i;
        }
        top=0;
        for(int i=n;i>=1;i--)
        {
            while(top&&h[i]>h[sta[top]])
            {
                ans[i]+=v[sta[top]];
                top--;
            }
            sta[++top]=i;
        }
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&h[i],&v[i]);
        }
        dandiaozhan();
        for(int i=1;i<=n;i++)
        {
            maxx=max(ans[i],maxx);
        }
        printf("%d",maxx);
        return 0;
    }
  • 相关阅读:
    JSON和Object数组在js中的转换
    Raphael绘制箭头arrow
    Web后台框架开发
    数据库开发
    docker
    git
    linux
    正则表达式工具
    python模拟ls命令
    python3基础
  • 原文地址:https://www.cnblogs.com/LJB666/p/10994568.html
Copyright © 2011-2022 走看看