백준 11003
N이 최대 오백만개이기 때문에 적어도 NlogN으로 풀어야 시간초과가 나지 않는다. 그러기 위해서는 우선순위 큐를 이용한 풀이법이 필요하다.
Di는 A(i-L+1) ~ Ai 까지의 최솟값을 도출해내야한다.
i-l+1은 음수값이 나올 수 있지만 Di에 무조건 Ai의 값은 포함되어야 한다. -> for 문으로 D1~Dn까지 값을 구해주면 된다.
#include<bits/stdc++.h>
using namespace std;
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>>pq;
int n, l;
int arr[5000001];
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> l;
for (int i = 1; i <= n; i++) cin >> arr[i];
for (int i = 1; i <= n; i++) {
pq.push({ arr[i],i });
int x = pq.top().second;
while (x < i - l + 1) {
pq.pop();
x = pq.top().second;
}
cout << pq.top().first << ' ';
}
}