반응형
https://www.acmicpc.net/problem/14459
14459번: 소가 길을 건너간 이유 11
우리는 존의 고민을 해결해 줄 방법을 찾았지만, 그걸 알려 주러 가다가 길을 잃었다. 존의 농장에 가긴 했지만, 2N개의 목초지는 없고 웬 N×N 격자가 있는 것이다. 알고 보니 우리는 동명이인의
www.acmicpc.net
[ 문제풀이 ]
이 문제를 풀기 전에 다음 글을 먼저 읽고 오시는 것을 추천드립니다.
https://rudalsd.tistory.com/175
[ 알고리즘 ] 최장 증가 부분 수열(Longest Increasing Subsequence)
1. 최장 증가 부분 수열(Longest Increasing Subsequence)이란? 어떠한 수열이 주어질 때, 그 수열에서 일부 원소를 뽑아내어 새로 만든 수열을 '부분 수열'이라고 하며, 이 수열이 오름차순을 유지하면 '증
rudalsd.tistory.com
1. a 배열을 만들어 왼쪽 소들의 종 번호의 인덱스를 저장하고, b 배열을 만들어 오른쪽 소들의 종 번호의 인덱스를 저장합니다.
2. 이중 for문을 이용하여 절댓값의 차이가 4 이하인 쌍을 vector<pair<int,int>>에 저장합니다.
3. 이 때 first의 값을 기준으로 오름차순, second의 값을 기준으로 내림차순으로 정렬합니다.
4. lower_bound를 이용하여 LIS를 만들어 주고, LIS의 길이를 출력해 줍니다.
[ 소스코드 ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include<iostream> #include<vector> #include<algorithm> using namespace std; int N; int a[100001]; int b[100001]; vector<pair<int, int>> arr; bool cmp(pair<int, int> left, pair<int, int> right) { if (left.first == right.first) return left.second > right.second; return left.first < right.first; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N; for (int i = 1; i <= N; i++) { int n; cin >> n; a[n] = i; } for (int i = 1; i <= N; i++) { int n; cin >> n; b[n] = i; } for (int i = 1; i <= N; i++) { for (int j = max(1, i - 4); j <= min(N, i + 4); j++) { arr.push_back({ a[i], b[j] }); } } sort(arr.begin(), arr.end(), cmp); vector<int>lis; for (auto& next : arr) { if (lis.empty()) { lis.push_back(next.second); } else { auto it = lower_bound(lis.begin(), lis.end(), next.second); if (it == lis.end()) { lis.push_back(next.second); } else { *it = next.second; } } } cout << lis.size(); } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 5012번 - 불만 정렬 (C++) (0) | 2023.08.05 |
---|---|
[ 백준 ] 17408번 - 수열과 쿼리 24 (C++) (0) | 2023.08.04 |
[ 백준 ] 15967번 - 에바쿰 (C++) (0) | 2023.08.02 |
[ 백준 ] 16978번 - 수열과 쿼리 22 (C++) (0) | 2023.08.01 |
[ 백준 ] 19940번 - 피자 오븐 (C++) (0) | 2023.07.31 |