* 행동영역 :
짝짓기는 stack
stack에 인덱스를 저장하라.
a[i] => 입력저장
while(top<입력) ret[idx]=입력, pop
끝나면, push(idx)
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
int m, n, a[1000004], ret[1000004];
stack<int> s;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(NULL); cout.tie(NULL);
fill(&ret[0], &ret[1000004], -1);
cin >> n ;
for (int i = 0; i < n; ++i)
{
cin >> a[i];
while (s.size() && a[s.top()] < a[i]) //if가 아니라 while써야함
{
ret[s.top()] = a[i];
s.pop();
}
s.push(i); //idx를 스택에 push하라.
}
for (int i = 0; i < n; ++i)
{
cout << ret[i] << " ";
}
return 0;
}
'Algorithm > boj' 카테고리의 다른 글
백준 15686 // 조합함수암기! (0) | 2023.05.30 |
---|---|
백준 1325 // 자식수찾기는 int dfs(ret=1, ret+=dfs) (0) | 2023.05.27 |
백준 1068 // 2차원벡터선언법 / 트리문제는 root 1개만 남는상황 예외처리하라 / 리프노드 카운팅은 int dfs (0) | 2023.05.23 |
백준 2636 // dfs는 방문처리먼저 해라/ 치즈는 dfs (0) | 2023.05.22 |
백준 14502 // 3중반복문 ijk=>조합구현, a조작할필요없음(!v만으로 안전지역) (1) | 2023.05.19 |