DP (LIS) 를 활용한 문제
map
관련 문제, string 관련 문제가 많이 나온듯 하다. 이분탐색도 그리디 와 함께 쓰이거나, 종종 예외 상황을 지켜야만 해결되는 문제가 많다. 요런 문제들 위주로 풀어봐야겠다.#include <iostream>
#include <vector>
using namespace std;
int N, num;
vector<int> v;
int lowerBound(int curr) {
int l = 0;
int r = v.size();
while (l < r) v[(l + r) / 2] >= curr ? r = (l + r) / 2 : l = (l + r) / 2 + 1;
return r;
}
void input() {
cin >> N >> num;
v.push_back(num);
for (int i = 1; i < N; i++) {
cin >> num;
if (v.back() < num) v.push_back(num);
else v[lowerBound(num)] = num;
}
}
void output() {
cout << v.size();
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
input();
output();
}