๐ค๋ฌธ์ ์ดํด
LCS(longest common sequence)๋ฌธ์ ๋ก 11053๋ฒ๊ณผ ์ ์ฌํ์ง๋ง n๊ณผ Ai์ ํฌ๊ธฐ๊ฐ ํจ์ฌ ํฐ ๋ฒ์ ์ ๋ฌธ์ ์ด๋ค.
๐ฅํ์ด๐ฅ
lower_bound๋ฅผ ์ด์ฉํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
์์ด์ด ์ ์ฅ๋์ด ์๋ arr๊ณผ ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ์์ด์ ์ฐพ์ ๋ฃ์ด์ค ๋ฒกํฐ v๋ฅผ ์ ์ธํด์ฃผ์๋ค
๊ฐ์ฅ ๋จผ์ v์ arr[0] ์์๋ฅผ ๋ฃ์ด์ฃผ๊ณ arr์ 1๋ฒ์งธ ์์๋ถํฐ ๋ง์ง๋ง๊น์ง for๋ฌธ์ ๋๋ ค์ฃผ์๋ค.
for๋ฌธ์์๋ v์ ๊ฐ์ฅ ๋ง์ง๋ง ์์๋ณด๋ค arr[i]๋ฒ์งธ ์์๊ฐ ๋ ํฐ ๊ฒฝ์ฐ์ v.push_back(arr[i])๋ฅผ ํด์ฃผ์๋ค.
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ v์์ arr[i]๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์์ ์ค์์ index๊ฐ ๊ฐ์ฅ ์์ ์์์ iterator๋ฅผ ํ์ํ๊ณ ๊ทธ ์์น์ arr[i]๋ฅผ ๋ฃ์ด์ฃผ์๋ค. ์ด ๋ถ๋ถ์ด ์กฐ๊ธ ์ดํด๊ฐ ์๋์๋๋ฐ ์๋ ์์๋ฅผ ๋ณด๋ฉด ๋๋์ด ์ฌ ๊ฒ์ด๋ค.
์์ ๋ฅผ ์ดํด๋ณด์
7
10 20 10 30 20 50 25
์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋ ์ ๊ฒฝ์ฐ๋๋ก ํ๋ค๋ฉด for๋ฌธ์์ i๊ฐ 5๊น์ง ์ํํ ๊ฒฝ์ฐ์ v์ ์ํ๋
10 20 30 50์ด ๋๋ค.
i๊ฐ 6์ผ ๋ arr[i] = 25์ด๊ณ , v์ ๋ง์ง๋ง ์์๋ 50์ด ๋๋๋ฐ ์ด ๊ฒฝ์ฐ์๋ if๋ฌธ์ ๋ง์กฑํ์ง ์์ else๋ฌธ์ผ๋ก ๋ค์ด๊ฐ๋ค
์ฌ๊ธฐ์ iter์๋ v[2]์ธ 30์ ํด๋นํ๋ ์์น๊ฐ ์ ์ฅ๋๋ค.
๊ทธ ์์น์ arr[i]์ ํด๋นํ๋ 25๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ๋ฒกํฐ v์ ์ ์ฅ๋ ์์๋ค์ ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ์์ด ์์ฒด๋ฅผ ์๋ฏธํ์ง ์๊ฒ ๋๋๋ฐ v์ size๊ฐ ์ ๋ต์ด ๋๋์ง ๊ถ๊ธํ ๊ฒ์ด๋ค. ์ด๋ v์ ์ํ๋
10 20 25 50์ด ๋๋ค.
์ฌ๊ธฐ์ 25๊ฐ 30์ ์์น์ ๋ค์ด๊ฐ๊ฑด 30์ด ์์๋ ์์น์์ 25๊ฐ 20๋ณด๋ค๋ ํฌ๊ณ 50๋ณด๋ค๋ ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
30 ๋ค์ 25๊ฐ ์ถ๊ฐ๋ ๊ฒ์ด ์๋๋ผ 30์ด ์๋ ์๋ฆฌ์ ๋ค์ด๊ฐ ๊ฒ์ด๋ฏ๋ก 20<x<50์ ์๋ฆฌ๋ฅผ ๋์ฒดํ ๊ฒ ๋ฟ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n;
int arr[1000001];
vector<int> v;
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
v.push_back(arr[0]);
for (int i = 1; i < n; i++) {
if (v.back() < arr[i]) v.push_back(arr[i]);
else {
auto iter = lower_bound(v.begin(), v.end(), arr[i]);
*iter = arr[i];
}
}
cout << v.size();
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 6087๋ฒ ๋ ์ด์ ํต์ (0) | 2022.11.15 |
---|---|
[๋ฐฑ์ค/C++] 15927๋ฒ ํ๋ฌธ์ ํ๋ฌธ์๋์ผ!! (0) | 2022.11.15 |
[๋ฐฑ์ค/C++] 11656๋ฒ ์ ๋ฏธ์ฌ ๋ฐฐ์ด (0) | 2022.11.14 |
[๋ฐฑ์ค/C++] 17396๋ฒ ๋ฐฑ๋์ด (0) | 2022.11.11 |
[๋ฐฑ์ค/C++] 20040๋ฒ ์ฌ์ดํด ๊ฒ์ (0) | 2022.11.03 |