백준 알고리즘(C++)
백준 17298번 오큰수 ( C++ )
coding232624
2024. 3. 28. 13:35
문제
https://www.acmicpc.net/problem/17298
17298번: 오큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
해설
2중 for문을 이용할 경우 시간초과가 발생 (n값이 큼)
stack을 사용하여 시간문제 해결
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include <bits/stdc++.h>
using namespace std;
int n, mp[1000004], ret[1000004], mn;
stack<int> s;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
fill(&ret[0], &ret[0] + n, -1);
for (int i = 0; i < n; i++)
{
cin >> mp[i];
while (s.size() && (mp[s.top()] < mp[i]))
{
ret[s.top()] = mp[i];
s.pop();
}
s.push(i);
}
for (int i = 0; i < n; i++)
{
cout << ret[i] << " ";
}
}
|
cs |