Peking University Online Judge 3250 Bad Hair Day

やるだけ(すみません調子こきました嘘です)
ループの中でやっていることは
・i番目の人に注目する
・もしスタックが空でない場合、仮にスタックの中にi番目の人より背が低い人がいたら、
その人からはi番目以降に来る人の頭は絶対に見えないので、スタックから出ていってもらう
・スタックの中の人は全員i番目の人の頭が見えるので、スタックの中の人数を答えにプラスする。
・スタックにi番目の人を入れる

#include<cstdio>
#include<stack>
using namespace std;
typedef long long int ll;

int N, h;
stack<int> sa;

int main(){
	scanf("%d", &N);
	ll res = 0LL;
	for(int i = 0; i < N; i++){
		scanf("%d", &h);
		while(!sa.empty() && sa.top() <= h) sa.pop();
		res += sa.size();
		sa.push(h);
	}
	printf("%lld\n", res);
	return 0;
}