思路:
最后发现对当前列车比我大的编号的栈有没有就好了,所以开个vector存一下,然后二分一下vector找一下第一个比我大的数就好了
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5+10;
int n,a[N];
vector<int>q;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
q.clear();
int ans=0;
for(int i=0;i<n;i++)
{
int sz=q.size();
if(!sz)
{
q.push_back(a[i]);
ans++;
}
else
{
vector<int>::iterator e=upper_bound(q.begin(),q.end(),a[i]);
if(e==q.end())
{
q.push_back(a[i]);
ans++;
}
else
{
int d=e-q.begin();
q[d]=a[i];
}
}
}
printf("%d\n",ans);
return 0;
}