soj 2511 Moooo 单调栈

原创 2015年11月17日 22:11:46

http://acm.scu.edu.cn/soj/problem.action?id=2511
题意:每头牛都会发出叫声,然而这个叫声只会被离他最近的一个比他高的牛听到,当然这个叫声是双向传播的。
思路:
找出第一个比他高的,就可以维护一个从栈顶到栈底单调增的栈,每次每个元素要进栈之前就将栈中所有比他小的元素出栈,这样之后栈顶的元素就是第一个比他高的。也就是跟那个windy cake 类似,把当前元素当做最大值,找这个最长区间,区间的边界就是两边的第一个比他高的,找到以后将这个牛听到的声音加上传来的音量。 每个元素都要找第一个比他高的元素利用单调栈就将复杂度从O(n^2) 降到O(n)。
左右各做一次单调栈就好了。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
#define M 100009
int n,h[M],v[M],ans[M];
int main()
{
    while(scanf("%d",&n) == 1)
    {
        memset(ans,0,sizeof(ans));
        for(int i = 0;i < n;i++) scanf("%d %d",&h[i],&v[i]);
        stack<int> s;
        int maxx = 0;
        for(int i = 0;i < n;i++) //对于每个元素找左边第一个高的,从左到右做单调栈
        {
            while(!s.empty() && h[s.top()] < h[i]) s.pop();
            if(!s.empty())
            {
                ans[s.top()] += v[i]; //第一个比他高的听到了这个声音
                maxx = max(maxx,ans[s.top()]);
            }
            s.push(i);
        }
        while(!s.empty()) s.pop();
        for(int i = n - 1;i >= 0;i--) //对于每个元素找右边第一个高的,从右到左做单调栈
        {
            while(!s.empty() && h[s.top()] < h[i]) s.pop();
            if(!s.empty())
            {
                ans[s.top()] += v[i];
                maxx = max(maxx,ans[s.top()]);
            }
            s.push(i);
        }
        printf("%d\n",maxx);
    }
    return 0;
}

SCU 2511 Moooo(单调栈模板题)

题意:给出n头牛,每头牛都会发出一个噪声,为v[i]。这个噪声只会被与他相邻高度严格比他高的牛所听到,问牛收到的最大的噪音是多少。 解法:因为我是在黄学长博客上找的题目23333,所以就是一道单调栈...
  • llzhh
  • llzhh
  • 2017年08月21日 15:04
  • 115

SCU-2511: Moooo【单调栈】

Farmer John's N (1

神奇的单调栈

  • 2017年10月27日 15:47
  • 1.3MB
  • 下载

CodeForces601D【单调栈维护最大值】

思路: 区间最值一定是相邻的差值的绝对值。预处理差值绝对值,预处理以每个位置的值为最大值能延伸的最长距离(单调栈处理)。 然后每次询问就是枚举区间,计算每个值的贡献。//#pragma comme...

qduoj LC的课后辅导(单调栈)

LC的课后辅导 发布时间: 2015年9月19日 21:42   时间限制: 1000ms   内存限制: 256M 描述 有一天,LC给我们出了一道题,如图: 这个图...

51nod 1272 最大距离 (单调栈)

1272 最大距离 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 给出一个长...
  • zjw6463
  • zjw6463
  • 2016年04月11日 18:20
  • 482

Terrible Sets(单调栈,一开始还被题目描述吓到了,理解样例后发现就是纸老虎题。。。)

Link:http://poj.org/problem?id=2082 Terrible Sets Time Limit: 1000MS   M...

HDU 5033 Building(2014北京网络赛 单调栈+几何)

博客原文地址: Building

Feel Good(单调栈(比之前更加完善的模板))

Link:http://poj.org/problem?id=2796 Feel Good Time Limit: 3000MS   Memor...

poj2796-动态规划思想+回溯&&单调栈第一题

一般来说,有动态规划思想的都是动态规划水题。 当然,前提是你完全理解了动态规划思想 给定你一些数,要求你找一个区间,要求这个区间内的数的和乘以这个区间内最小的数,要求这个积最大。 简直蒙蔽, ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:soj 2511 Moooo 单调栈
举报原因:
原因补充:

(最多只允许输入30个字)