質問の説明
農場主ジョンの牛は風で髪が乱れています…
各牛の高さは hi (1 ≤ hi ≤ 1,000,000,000) です。現在、右を向いた牛の列があり、合計 N 頭の牛があります (1 ≤ N ≤ 80,000)。牛 i の場合、牛 i+1、i+2、...、N の身長が厳密に牛 i より小さい場合、牛 i の乱れた髪型が見えます。
たとえば、次の例:
* * * * = * =
* * * =
* = * - * = * 牛はこちらを向いています -->
= * = * = * =
- = = = *
= = = = = =
1 2 3 4 5 6
(「*」は空を意味し、翻訳者が書式設定のために特別に作成したもので、元のタイトルには含まれていませんでした)
i 番目の牛が見ることができる髪型の数を ci とすると、c1 + c2 + c3 + … + cN の値を計算してください。
上の例の場合、答えは 3 + 0 + 1 + 0 + 1 + 0 = 5 となります。
入力
1行目:牛の頭数N
2行目からN+1行目: i+1行目は牛iの高さを入力します。
出力
1行目: c1からcNまでの合計である整数
サンプル入力
6
10
3
7
4
12
2
サンプル出力
5
#include<iostream>
#include<スタック>
名前空間 std を使用します。
const int N=1e6+10;
長い長い a[N];
int main(){
長い長い n;cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
stack<int>;
s.push(a[1]);
長い長い k=0;
for(int i=2;i<=n;i++){
while(!s.empty()&&s.top()<=a[i])
s.pop();
k+=s.size();
s.push(a[i]);
}
cout<<k<<endl;
0を返します。
}