[Stack νμ©] 17299. μ€λ±ν°μ
https://www.acmicpc.net/problem/17299
17299λ²: μ€λ±ν°μ
첫째 μ€μ μμ΄ Aμ ν¬κΈ° N (1 ≤ N ≤ 1,000,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έμ μμ΄ Aμ μμ A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)μ΄ μ£Όμ΄μ§λ€.
www.acmicpc.net
μ€ν°μλ₯Ό νμλ€λ©΄ λ§€μ° μ½κ² μ κ·Όν μ μλ λ¬Έμ μ λλ€.
맀컀λμ¦μ λμΌνλ°, μ€ν°μμ λ¬λ¦¬ μ΄λ€ κ°μ λΉκ΅νκ³ μ΄λ€ κ°μ μ λ΅ λ°°μ΄μ μ μ₯ν΄μΌνλμ§λ§ μ νμ νλ©΄ μ½κ² ν μ μμ΅λλ€.
μ°μ μΈν μ νκΈ° μν΄ λ°°μ΄μ μ λ ₯λ°κ³ mapμ μ΄μ©ν΄ μΉ΄μ΄ν νμ¬ c λ°°μ΄μ ν΄λΉ μ«μκ° λμ¨ νμλ₯Ό λ£μ΄μ€λλ€.
μ€ν°μμμλ λ°°μ΄ κ°μ μ€νμ λ£κ³ μ€νμ νκ°κ³Ό λΉκ΅νλ€λ©΄, μ€λ±ν°μ λ°°μ΄μ λ§λλ κ³Όμ μμλ λΉκ΅ κ³Όμ μμ vλ°°μ΄μ΄ μλ c λ°°μ΄μ μΈλ±μ€ κ°μ λΉκ΅ν©λλ€. λ¬Όλ‘ νΈμ¬ν λλ μ€ν°μ λ°°μ΄κ³Ό λμΌνκ² λ°°μ΄ κ°μ μ½μ ν©λλ€.
νμλ λΉκ΅ν λλ stackμ topμ second ( cλ°°μ΄ ), νΈμ¬ν λλ stackμ topμ first ( vλ°°μ΄ ) μ¬μ©νκΈ° μν΄ μ€νμ vλ°°μ΄κ°κ³Ό cλ°°μ΄κ°μ pairλ‘ λ¬Άμ΄μ μ¬μ©νμμ΅λλ€.
μμ€ μ½λ
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <unordered_map>
#define FASTio ios_base :: sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define endl '\n'
using namespace std;
int n;
vector<int> v(1000001);
vector<int> cnt(1000001);
vector<int> ans(1000001,-1);
unordered_map<int, int> m;
stack<pair<int,int>> st;
int main()
{
FASTio;
cin >> n;
for(int i=0;i<n;i++)
{
cin >> v[i];
m[v[i]]++;
}
for(int i=0;i<n;i++)
{
cnt[i] = m[v[i]];
}
st.push(make_pair(v[n-1], cnt[n-1]));
for(int i=n-2;i>=0;i--)
{
while(!st.empty() && st.top().second <= cnt[i])
{
st.pop();
}
if(st.empty())
{
st.push(make_pair(v[i], cnt[i]));
continue;
} else {
ans[i] = st.top().first;
st.push(make_pair(v[i], cnt[i]));
}
}
for(int i=0;i<n;i++){
cout << ans[i] << ' ';
}
return 0;
}
μ²μμ μκ°μ΄κ³Όκ° λ°μν΄μ μ½λλ₯Ό μ΄ν΄λ³΄λ€κ° mapμμ μκ°μ΄κ³Όκ° κ±Έλ¦°λ€λ κ²μ μΈμ§νμ΅λλ€.
κ·Έλμ mapμ unordered_mapμΌλ‘ λ°κΏμ ν΄κ²°.
μ°Έκ³ μλ£
hash_map | unordered_map | map μ°¨μ΄ λΉκ΅, νΉμ§ μ 리 - C++
hash_μ unordered_μ λνμ¬ hashλΌλ λ§μ΄ λΆμ§ μμ map,setμ μλ£λ₯Ό μ λ ¬ν΄μ μ μ₯ν©λλ€. (keyλ₯Ό κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬) λ°λΌμ μνν λλ μ μ₯λ λ°μ΄ν°λ₯Ό λ£μ μμλλ‘κ° μλ μλμ λ ¬λ
eocoding.tistory.com