N이 적당히 크므로 O(N2) 은 안되고 O(NlogN) 으로 해결해야 한다.
#include <bits/stdc++.h>
using namespace std;
int LIS(vector<int>& arr){
vector<int> v(1, arr[0]);
for(int i=1; i<arr.size(); ++i){
if(v.back() < arr[i]){
v.push_back(arr[i]);
} else {
*lower_bound(v.begin(), v.end(), arr[i]) = arr[i];
}
}
return v.size();
}
int main(){
int i, n;
while(~scanf("%d", &n)){
vector<int> a(n);
for(i=0; i<n; ++i) scanf("%d", &a[i]);
printf("%d\n", LIS(a));
}
return 0;
}
댓글 없음:
댓글 쓰기