水题, 但我WA了一次, 原因是忘了 push(t);
sum 表示当前山峰前面有多少能看见的山峰。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <stack>
using namespace std;
stack <int> s;
int main()
{
int n, t, ans = 0, sum = 0;
cin >> n;
while(n --)
{
scanf("%d", &t);
if(s.empty()) s.push(t);
else{
sum ++;
ans += sum;
while(s.size() && s.top() < t)
{
sum --;
s.pop();
}
s.push(t);
}
}
cout << ans << endl;
return 0;
}