链接:
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 }