https://www.acmicpc.net/problem/11003
문제
N개의 수 A1, A2, ..., AN과 L이 주어진다.
Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다.
입력
첫째 줄에 N과 L이 주어진다. (1 ≤ L ≤ N ≤ 5,000,000)
둘째 줄에는 N개의 수 Ai가 주어진다. (-109 ≤ Ai ≤ 109)
출력
첫째 줄에 Di를 공백으로 구분하여 순서대로 출력한다.
예제 입력 1
12 3
1 5 2 3 6 2 3 7 3 5 2 6
예제 출력 1
1 1 1 2 2 2 2 2 3 3 2 2
#include <iostream>
#include <deque>
#include <algorithm>
#include <vector>
using namespace std;
deque <pair<int, int>> dq;
int N, L, chk;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
freopen("input.txt", "r", stdin);
cin >> N >> L;
for (int i = 0; i < N; i++)
{
cin >> chk;
if (!dq.empty() && dq.front().second <= i - L) {
dq.pop_front();
}
while (!dq.empty() && dq.back().first > chk) {
dq.pop_back();
}
dq.push_back({ chk,i });
cout << dq.front().first << "\n";
}
return 0;
}
'개발자 > algorithm' 카테고리의 다른 글
백준 14476번 : 최대공약수 하나 빼기 (c++) (0) | 2020.08.16 |
---|---|
백준 1735번 : 분수 합 (c++) (0) | 2020.08.16 |
백준 2517번 : 달리기 (c++) (0) | 2020.08.16 |
백준 7453번 : 합이 0인 네 정수 (c++) (0) | 2020.08.16 |
백준 1072번 : 게임 (c++) (0) | 2020.08.16 |