POJ3250Bad Hair Day

http://poj.org/problem?id=3250

 题意 :  n个牛排成一列向右看,牛 i 能看到牛 j 的头顶,当且仅当牛 j 在牛 i 的右边并且牛 i 与牛 j 之间的所有牛均比牛 i 矮。 设牛 i 能看到的牛数为ni,求ni的和。

思路 : 表示一开始就想用数组去操作,结果说是会超时,问了别人的才知道原来要用栈啊,用栈保存,新的元素若是比栈顶元素大,就把栈里小于新元素的弹出栈

#include<cstdio>

#include<cstring>

#include<stack>

#include<iostream>

using namespace std ;

int main()

{

    int n ;

    scanf("%d",&n) ;

    stack<long long>Q;

    long long cnt = 0 ;

    int a;

    scanf("%d",&a) ;

        Q.push(a) ;

    for(int i = 1 ; i < n ; i++)

    {

        scanf("%d",&a) ;

        while(!Q.empty()&&a>=Q.top())

        {

            Q.pop();

        }

        cnt += Q.size();

        Q.push(a) ;

    }

    printf("%lld\n",cnt) ;

    return 0 ;

}
View Code

 

你可能感兴趣的:(AIR)