반응형
www.acmicpc.net/problem/12015
12015번: 가장 긴 증가하는 부분 수열 2
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000)
www.acmicpc.net
문제
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.
예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.
입력
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다.
둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000)
출력
첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector <int> list;
int N , ans = -1;
void binarySearch(int num){
int left = 0;
int right = list.size()-1;
while (left < right){
int mid = (left + right) /2;
if(list[mid] >= num){ //right 인덱스를 줄여가며 (같거나큰수) 중 가장 작은수를 찾는다.
right = mid;
}else{
left = mid+1;
}
}
list[right] = num;
}
int main(){
cin >> N;
for(int curIdx = 0 ; curIdx < N ;curIdx++){
int input;
cin >> input;
if(curIdx == 0 ) {
list.push_back(input);
}
else{
if(list[list.size()-1] >= input){
binarySearch(input);
}
else{
list.push_back(input);
}
}
}
cout<< list.size();
return 0;
}
반응형
'Algorithm > BOJ' 카테고리의 다른 글
51. SW_Test 연습 백준 스타트링크 (0) | 2021.03.02 |
---|---|
50. SW_Test 연습 백준 보물섬 (0) | 2021.03.02 |
47. SW_Test 연습 백준 가장 긴 증가하는 부분 수열 (0) | 2021.02.24 |
46. SW_Test 연습 음식평론가 (0) | 2021.02.20 |
45. SW_Test 연습 배 (0) | 2021.02.20 |
댓글