πŸ“¦12015: κ°€μž₯ κΈ΄ μ¦κ°€ν•˜λŠ” λΆ€λΆ„ μˆ˜μ—΄ 2


[μ•Œκ³ λ¦¬μ¦˜ 풀이] κ°•λ™κ·œ
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-19
문제 ν™•μΈν•˜κΈ°

풀이

  • ν•΄λ‹Ή μˆ˜μ—΄μ˜ 크기가 1,000,000 이 μ΅œλŒ€μ΄κΈ° λ•Œλ¬Έμ— 의 λ°©λ²•μœΌλ‘œλŠ” ν’€ 수 μ—†λ‹€.
  • λ•Œλ¬Έμ— 이뢄 탐색을 톡해 의 λ°©μ‹μœΌλ‘œ ν’€μ΄ν•œλ‹€.
#include <iostream>
#include <algorithm>
#include <vector>
#define endl '\n'
using namespace std;
 
int N;
int arr[1000001];
vector<int> vec;
 
void Input(){
    cin >> N;
    
    for(int i=0; i<N; i++){
        cin >> arr[i];
    }
}
 
int binary_search(int target){
    int start = -1;
    int end = vec.size()-1;
    while(end > start+1){
        int mid = (start + end)/2;
        if(vec[mid] >= target){
            end = mid;
        }
        else start = mid;
    }
    return end;
}
 
void Solution(){
    vec.push_back(arr[0]);
    for(int i=1; i<N; i++){
        if(vec.back() < arr[i]){
            vec.push_back(arr[i]);
        }
        else {
            int idx = binary_search(arr[i]);
            vec[idx] = arr[i];   
        }
    }
    cout << vec.size() << endl;
 
}
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    Input();
    Solution();
 
    return 0;
}