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; }