题面
题解
- 注意看清题中的输入输出顺序,开始是763519248 ,但是输入是倒着输入的,再看输出,是按递减的顺序出站的,所以要大的在前,小的在后
如图,如果放入的数小于当前对列的尾端,那么就可以放入,然后更新队列尾端即可,这里我们可以用set 实现队列的数量,然后二分查找合适的队列放入
代码
#include<cstdio>
#include<iostream>
#include<set>
using namespace std;
int main() {
int n;
cin>>n;
set<int> st;
for(int i=0;i<n;i++){
int x;
cin>>x;
//如果能找到一个数大于x,那么就说明x可以放在这个数后
if(st.upper_bound(x)!=st.end()){
//更新这个数的末尾
st.erase(st.upper_bound(x));
}
st.insert(x);
}
cout<<st.size()<<endl;
return 0;
}