原题链接
使用set和二分查找函数,【lower_bound返回首个大于等于该数值的的位置】
#include<bits/stdc++.h>
using namespace std;
int a[100001]={0};
set<int>s;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
if(s.upper_bound(a[i])!=s.end()){
//cout<<" d "<< *s.upper_bound(a[i])<<" "<<a[i]<<endl;
s.erase(s.upper_bound(a[i]));
s.insert(a[i]);
}
else
{
s.insert(a[i]);
//cout<<a[i]<<" -"<<endl;
}
}
cout<<s.size();
//进去后的序列必定是递增的,所以找到一个最大的小于的就行
}