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 - ์๊ฐ์ด๊ณผ
(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 |