它要把所有数都放进队列中,能否进队列看的是队列中队尾也就是最小的元素。
开一个数组,模拟有size个队列,数组中存每个队列最小的元素
插入新元素比数组中所有元素大就size加一,表示新开一个队列,否则二分查找到第一个比他大的位置替换
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[100000];
int n;
int tp,size = 0;
scanf("%d",&n);
for(int i =0;i<n;i++)
{
scanf("%d",&tp);
if(size==0)
{
a[0] = tp;
size++;
}else{
int x =lower_bound(a,a+size,tp) - a ;
if(x==size)a[size++] = tp;
else a[x] = tp;
}
}
printf("%d\n",size);
return 0;
}