スタックの質問例

質問の説明

農場主ジョンの牛は風で髪が乱れています…

各牛の高さは 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を返します。

}

おすすめ

転載: blog.csdn.net/m0_74310050/article/details/128927561