- toc {:toc}
๋ฌธ์

๋์์๋ N ๊ฐ์ ๋น๋ฉ์ด ์๋ค.
๋น๋ฉ ๊ด๋ฆฌ์ธ๋ค์ ๋งค์ฐ ์ฑ์ค ํ๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์ ์ ์์ ๋ฒค์น๋งํน ํ๊ณ ์ถ์ดํ๋ค.
i ๋ฒ์งธ ๋น๋ฉ์ ํค๊ฐ hi ์ด๊ณ , ๋ชจ๋ ๋น๋ฉ์ ์ผ๋ ฌ๋ก ์ ์๊ณ ์ค๋ฅธ์ชฝ์ผ๋ก๋ง ๋ณผ ์ ์๋ค.
i ๋ฒ์งธ ๋น๋ฉ ๊ด๋ฆฌ์ธ์ด ๋ณผ ์ ์๋ ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์ ์ ์์ i+1, i+2, โฆ , N ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์์ ์ด ์์นํ ๋น๋ฉ๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์ ๋น๋ฉ์ด ์์ผ๋ฉด ๊ทธ ๋ค์์ ์๋ ๋ชจ๋ ๋น๋ฉ์ ์ฅ์์ ๋ณด์ง ๋ชปํ๋ค.
์) N=6, H = {10, 3, 7, 4, 12, 2}์ธ ๊ฒฝ์ฐ
=
= =
= - =
= = = -> ๊ด๋ฆฌ์ธ์ด ๋ณด๋ ๋ฐฉํฅ
= - = = =
= = = = = =
10 3 7 4 12 2 -> ๋น๋ฉ์ ๋์ด
[1][2][3][4][5][6] -> ๋น๋ฉ์ ๋ฒํธ
- 1 ๋ฒ ๊ด๋ฆฌ์ธ์ 2, 3, 4 ๋ฒ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 2 ๋ฒ ๊ด๋ฆฌ์ธ์ ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 3 ๋ฒ ๊ด๋ฆฌ์ธ์ 4 ๋ฒ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 4 ๋ฒ ๊ด๋ฆฌ์ธ์ ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 5 ๋ฒ ๊ด๋ฆฌ์ธ์ 6 ๋ฒ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 6 ๋ฒ ๊ด๋ฆฌ์ธ์ ๋ง์ง๋ง์ด๋ฏ๋ก ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
๋ฐ๋ผ์, ๊ด๋ฆฌ์ธ๋ค์ด ์ฅ์์ ์์ ํ์ธํ ์ ์๋ ์ด ์๋ 3 + 0 + 1 + 0 + 1 + 0 = 5 ์ด๋ค.
์ ๋ ฅ
- ์ฒซ ๋ฒ์งธ ์ค์ ๋น๋ฉ์ย ๊ฐ์ N ์ด ์ ๋ ฅ๋๋ค.(1 โค N โค 80,000)
- ๋ ๋ฒ์งธ ์ค ๋ถํฐ N+1 ๋ฒ์งธ ์ค๊น์ง ๊ฐ ๋น๋ฉ์ ๋์ด๊ฐ h ์ ๋ ฅ๋๋ค. (1 โค h โค 1,000,000,000)
์ถ๋ ฅ
- ๊ฐ ๊ด๋ฆฌ์ธ๋ค์ด ๋ฒค์น๋งํน์ด ๊ฐ๋ฅํ ๋น๋ฉ์ ์์ ํฉ์ ์ถ๋ ฅํ๋ค.
์ถ์ฒ:https://www.acmicpc.net/problem/6198
ํ์ด
๋ค์ ํ์ด๋ณด๊ธฐ
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
stack<int> s;
int n;
ll sum = 0, height;
cin >> n;
while(n--){
cin >> height;
if(s.empty()) s.push(height);
else{
while(!s.empty() && s.top() <= height){
s.pop();
}
sum += s.size();
s.push(height);
}
}
cout << sum << endl;
return 0;
}