티스토리 뷰

백준

백준 소스코드 [C++] 11003 최솟값 찾기

Hani_Levenshtein 2021. 7. 6. 06:59

https://www.acmicpc.net/problem/11003

 

11003번: 최솟값 찾기

N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다.

www.acmicpc.net

백준 소스코드 [C++] 11003 최솟값 찾기

#include <iostream>
#include <algorithm>
#include <queue>
#include <string>
#include <deque>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string.h>
#include <set>
#include <map>
#include <unordered_map>
#include <sstream>
#include <cstdlib>
#include <cassert>
#define all(v) v.begin(), v.end()
#define pii pair<int, int>
#define pli pair<ll, int>
#define make_unique(v) sort(all(v)), v.erase(unique(all(v)), v.end())
typedef long long ll;
using namespace std;


struct dot {
    int pos,val;
};

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int n,m,k;
    cin>>n>>m;
    deque<dot> dq;
    vector<int> v;
    for(int i=1;i<=n;i++) {
        cin>>k;
        while(!dq.empty() && dq.front().pos < i+1-m) dq.pop_front();
        
        while(!dq.empty() && dq.back().val>=k) dq.pop_back();
            
        dq.push_back({i,k});
        
        v.push_back(dq.front().val);
    }
    for(int i=0;i<n;i++)
        cout<<v[i]<<" ";
    cout<<'\n';
    
    return 0;
}
댓글