쌓고 쌓다
[백준] 최솟값 찾기 11003번 C++ 풀이 본문
https://www.acmicpc.net/problem/11003
#include <iostream>
#include <vector>
#include <algorithm>
#include <deque>
using namespace std;
vector<int> v;
deque<pair<int, int>> dq;
int N, L;
int main(void)
{
cin.tie(0);
cout.tie(0);
ios_base::sync_with_stdio(0);
int num;
cin >> N >> L;
for (int i = 0; i < N; i++)
{
cin >> num;
v.push_back(num);
}
for (int i = 1; i <= N; i++)
{
if (!dq.empty())
{
if (dq.front().second < i - L + 1) // dq에 든 첫 원소의 인덱스가 범위에 안속하면 제거
dq.pop_front();
}
while (!dq.empty() && dq.back().first > v[i - 1]) // 뒤에서부터 현재 넣을 원소보다 큰 수들은 제거
dq.pop_back();
dq.push_back(make_pair(v[i - 1],i)); // dq의 맨뒤에 삽입 ( 후보가 될 수 있음)
cout << dq.front().first << " "; // dq의 맨 앞원소는 현재 범위에서의 최솟값임
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 대칭 차집합 1269번 C++ 풀이 (0) | 2021.12.31 |
---|---|
[백준] 카드 합체 놀이 15903번 C++ 풀이 (0) | 2021.12.30 |
[백준] 커피숍2 1275번 C++ 풀이 (0) | 2021.12.28 |
[백준] 암기왕 2776번 C++ 풀이 (0) | 2021.12.27 |
[백준] 문자열 집합 14425번 C++ 풀이 (0) | 2021.12.26 |
Comments