๐Ÿ• Baaaaaarking/0x07๊ฐ• - ๋ฑ

[BOJ P5][C++] 11003๋ฒˆ: ์ตœ์†Ÿ๊ฐ’ ์ฐพ๊ธฐ

์„ ๋‹ฌ 2022. 2. 25. 15:28
๋ฐ˜์‘ํ˜•

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

 

๋ฌธ์ œ

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 - ์‹œ๊ฐ„์ดˆ๊ณผ

(1)

๋ฑ์—๋Š” ์ตœ๋Œ€ l๊ฐœ ์ดํ•˜์˜ ์›์†Œ๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ๋„๋ก

์ƒˆ๋กœ์šด ์ˆ˜๋ฅผ ๋„ฃ์—ˆ๋Š”๋ฐ ๊ฐฏ์ˆ˜์ดˆ๊ณผ๋ผ๋ฉด ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์• ๋ฅผ pop

 

(2)

๊ทธ๋ฆฌ๊ณ  ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋˜๋Š”๋ฐ...

// Authored by : seondal
// Co-authored by : -

//#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <deque>

using namespace std;

vector<int> v;
deque<int> d;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    int n, l;
    cin >> n >> l;
    
    for(int i=0; i<n; i++){
        int tmp;
        cin >> tmp;
        v.push_back(tmp);
    }
    
    for(int i=0; i<n; i++){
        // (1)
        d.push_back(v[i]);
        if(d.size() > l) d.pop_front();
        
        // (2) ์ตœ์†Ÿ๊ฐ’ ๊ตฌํ•˜๊ธฐ
        int min = 1000000001;
        for(int j=0; j<d.size(); j++){
            if(min > d[j]) min = d[j];
        }
        cout << min << " ";
    }
    
    
    return 0;
}

/*
 */

 

์–ด๋ฆผ๋„์—†์ง€~~ ์—ญ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ์— ๊ฑธ๋ ธ๋‹ค

 


 

ํ’€์ด2 - ์„ฑ๊ณต

 

์‹œ๊ฐ„ ์ ˆ์•ฝ์„ ์œ„ํ•ด ๋ฑ์˜ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด์„œ ์ตœ์†Ÿ๊ฐ’์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ตฌํ•ด๋ณด์ž

 

์šฐ์„  ๋ฑ์— ์ง‘์–ด๋„ฃ์„๋•Œ {๋„ฃ์€ ๋ฒˆ์งธ, ๊ฐ’} ์˜ ์Œ์œผ๋กœ ์ง‘์–ด๋„ฃ๊ธฐ๋กœ ํ–ˆ๋‹ค

deque<pair<int, int>> d;

๊ทธ๋Ÿฌ๋ฉด ๋ฑ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ์•„๋‹Œ

d.front().first ๊ฐ’๊ณผ for๋ฌธ์˜ i๊ฐ’์„ ๋น„๊ตํ•ด์„œ ๋น ์ ธ์•ผ ํ•  ์›์†Œ๋ฅผ ํƒ€์ด๋ฐ์— ๋งž๊ฒŒ pop ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

if(!d.empty() && i >= d.front().first + l) d.pop_front();

 

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ๋ฑ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ popํ•ด๋„ ๋˜๋Š” ์ƒํƒœ๊ฐ€ ๋งŒ๋“ค์–ด์กŒ์œผ๋‹ˆ

์ด์ œ push๋ฅผ ํ•˜๊ธฐ ์ „์— ์ž์‹ ๋ณด๋‹ค ํฐ ์›์†Œ๋Š” ๋นผ๋ฒ„๋ฆฌ๋Š” ์ž‘์—…์„ ์ง„ํ–‰

while(!d.empty() && d.back().second > v[i-1]) d.pop_back();

 

๊ทธ๋Ÿฌ๋ฉด ๋ฑ์˜ ๋งจ ์––์€ ํ•ด๋‹น ์‹œ์ ์—์„œ ์ตœ์†Ÿ๊ฐ’์ธ ์• ๋“ค๋งŒ front ์— ์žˆ๊ฒŒ ๋œ๋‹ค

๊ทธ๋Ÿฌ๋ฉด ๊ทธ ์ตœ์†Ÿ๊ฐ’์ธ front ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๊ฐ„๋‹จ ํ•ด๊ฒฐ

 

// Authored by : seondal
// Co-authored by : -

//#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <deque>

using namespace std;

vector<int> v;
deque<pair<int, int>> d;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    int n, l;
    cin >> n >> l;
    
    for(int i=1; i<=n; i++){
        int tmp;
        cin >> tmp;
        v.push_back(tmp);
    }
    
    for(int i=1; i<=n; i++){
        if(!d.empty() && i >= d.front().first + l) d.pop_front();
        while(!d.empty() && d.back().second > v[i-1]) d.pop_back();
        d.push_back({i, v[i-1]});
        cout << d.front().second << " ";
    }
    
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•

'๐Ÿ• Baaaaaarking > 0x07๊ฐ• - ๋ฑ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ G5][C++] ๋ฐฑ์ค€ 5430๋ฒˆ: AC  (0) 2022.02.23
[BOJ S4][C++] 1021๋ฒˆ: ํšŒ์ „ํ•˜๋Š” ํ  (0) 2022.02.21