POJ 3250 Bad Hair Day(单调递增栈)

来源:互联网 发布:ubuntu 16.04 wine1.9 编辑:程序博客网 时间:2024/05/29 17:33

题目地址:点击打开链接

题意:牛排队排好,每个牛只能看到比它高度严格低的牛,问所有的牛能看到的个数

思路:换个思路,求每个牛能被看到多少次,加起来,和题目要求的结果是一样的,单调递增栈:http://blog.csdn.net/alongela/article/details/8227707

AC代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>typedef long long ll;using namespace std;int main(){    int n,i,a;    while(scanf("%d",&n) != EOF)    {        ll ans = 0;        stack<int> s1;        for(i=0; i<n; i++)        {            scanf("%d",&a);            while(!s1.empty() && s1.top()<=a)//比这个牛低的肯定看不到这个牛以及它以后的牛,所以弹出                s1.pop();            ans += s1.size();//栈里面的牛的个数都能看到这个牛            s1.push(a);        }        printf("%I64d\n",ans);    }    return 0;}


0 0
原创粉丝点击