题意:裸的最长上升子序列。
思路:传统的O(N^2)的DP没法过。
用O(NLOGN)的贪心方法过。
#include<iostream>
using namespace std;
const int N=100005;
int n;
int stack[N];
int sp;
void insert(int t)
{
int head=1;
int tail=sp-1;
int mid;
while(head<tail)
{
mid=(head+tail)/2;
if(stack[mid]<t)
{
head=mid+1;
}
else
{
tail=mid;
}
}
stack[head]=t;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
sp=1;
int first;
scanf("%d",&first);
stack[sp++]=first;
int in;
for(int i=2;i<=n;i++)
{
scanf("%d",&in);
if(in>stack[sp-1])
stack[sp++]=in;
else
{
insert(in);
}
}
printf("%d\n",sp-1);
}
return 0;
}