题目:895. 最长上升子序列
思路:用队列来存储当前最长序列,但当最新的数x小于队列里的最大元素值时,在队列里找到最后一个小于x的坐标y,然后在a[++y]中更新为x;
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5+10;
const int INF=1e9+1;
int n;
int a[1010];
int main(){
cin>>n;
int x,k=0;
a[0]=-INF;
for(int i=0;i<n;i++){
cin>>x;
/*if(x>a[k]){
a[++k]=x;
continue;
}*/
//这一段加上也不影响结果
int l=0,r=k;
while(l<r){
int mid=l+r+1>>1;
if(a[mid]<x) l=mid;
else r=mid-1;
}
a[++l]=x;
k=max(k,l);
}
cout<<k;
return 0;
}