- 대표적인 슬라이딩 윈도우 문제
 
- 매번 새로운 창문 안에서의 최소값을 출력해야 하는 문제
 
- 풀이 과정
- i = 0 : [ 1(0) ]
 
- i = 1 : [ 1(0), 5(1) ]
 
- i = 2 : [ 1(0), 5(1), 2(2) ]
 
- i = 3 : 
1(0) [ 5(1), 2(2), 3(3) ]
우선순위큐에서 가장 최소값(top)이 1(0) 인데 이는 범위를 벗어났으므로 pop 
- i = 4 : [ 5(1), 2(2), 3(3), 6(4) ]
 
- i = 5 : 
2(2) [ 5(1), 3(3), 6(4), 2(5) ]
우선순위큐에서 가장 최소값(top)이 2(2) 인데 이는 범위를 벗어났으므로 pop 
- i = 6 : [ 5(1), 3(3), 6(4), 2(5), 3(6) ]
 
- i = 7 : [ 5(1), 3(3), 6(4), 2(5), 3(6), 7(7) ]
 
- i = 8 : 
2(5) [ 5(1), 3(3), 6(4), 3(6), 7(7), 3(8) ]
우선순위큐에서 가장 최소값(top)이 2(5) 인데 이는 범위를 벗어났으므로 pop 
- i = 9 : [ 5(1), 3(3), 6(4), 3(6), 7(7), 3(8), 5(9) ]
 
- i = 10 : [ 5(1), 3(3), 6(4), 3(6), 7(7), 3(8), 5(9), 2(10) ]
 
- i = 11 : [ 5(1), 3(3), 6(4), 3(6), 7(7), 3(8), 5(9), 2(10), 6(11) ]
 
 
#include <iostream>
#include <vector>
#include <algorithm>
#include <deque>
#include <queue>
using namespace std;
struct A {
    int data;
    int pos;
};
struct cmp {
    bool operator()(const A& a, const A& b) {
        return a.data > b.data;
    }
};
int main() {
    
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int N, L;
    cin >> N >> L;
    vector<int> arr(N);
    for (int i = 0; i < N; ++i)
        cin >> arr[i];
    priority_queue<A, vector<A>, cmp> pq;
    for (int i = 0; i < N; ++i) {
        pq.push({ arr[i], i });
        int pos = pq.top().pos;
        while (pos < i - L + 1) {
            pq.pop();
            pos = pq.top().pos;
        }
        cout << pq.top().data << ' ';
    }
    return 0;
}