#include<bits/stdc++.h> using namespace std; int b[100010]; vector<int>ans; int main() { int n,cnt=0; cin>>n; for(int i=1;i<=n;i++) cin>>b[i]; ans.push_back(b[1]); for(int i=2;i<=n;i++){ if(b[i]<ans[ans.size()-1])*lower_bound(ans.begin(),ans.end(),b[i]) = b[i]; else ans.push_back(b[i]); } printf("%d\n",ans.size()); return 0; }
哦 既然根据规则 不管什么顺序进来 都得按照1,2,3...n-1,n的顺序来的话
由于列车要逆序输出 那么如果同一轨道 大号车在小号车后面 那么无论怎样 都会使得大号车走在小号车后面
所以当号码超过某个轨道的队尾时 就要重新开个轨道来处理
那么就是二分所有队尾咯~