由于数据大,常规做法会T。
然后NLOGN的方法小小get了一下。我觉得这种做法如果只是想知道怎么做的话,看代码比看字来的容易懂,但是当然想要知道原理的话还是要去看字呀。
然后自己偷懒并没有去把原理看懂。
#include <stdio.h>
#include <iostream>
using namespace std;
#define maxn 100010
int que[maxn];
int top;
void update(int x)
{
int l=0,r=top-1;
int mid=(l+r)>>1;
while(l<r)
{
if(x>que[mid]) l=mid+1;
else r=mid;
mid=(l+r)>>1;
}
que[l]=x;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
top=0;
int x;
scanf("%d",&x);
que[top++]=x;
for(int i=1;i<n;i++)
{
scanf("%d",&x);
if(x>que[top-1]) que[top++]=x;
else
update(x);
}
printf("%d\n",top);
}
return 0;
}