POJ 3250 栈

链接:

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

题意:

一群牛排成一列,每头牛都往下看,只要他比下面的牛高,就能看到那头牛的头发

问所有的牛一共能看到多少头牛的头发

题解:

用栈模拟,只要当前牛的高度大于栈顶的牛的高度,就pop,否者push

这个时候栈里的高度是单调递减的,ans+=栈的size就行了

注意要用long long

代码:

31 stack<int> S;
32 
33 int main() {
34     int n;
35     cin >> n;
36     ll ans = 0;
37     while (n--) {
38         int a;
39         scanf("%d", &a);
40         while (!S.empty() && a >= S.top()) S.pop();
41         S.push(a);
42         ans += S.size() - 1;
43     }
44     cout << ans << endl;
45     return 0;
46 }

 

posted @ 2017-04-24 14:09  Flowersea  阅读(255)  评论(0编辑  收藏  举报