最长上升子序列
题目链接:http://poj.org/problem?id=2533
#include<cstdio>
#include<algorithm>
using namespace std;
int stack[1005];
int main()
{
int i,n,t;
while(~scanf("%d",&n))
{
int top=0;
stack[0]=-1;
for(i=0;i<n;i++)
{
scanf("%d",&t);
if (t>stack[top])//如果大于栈顶元素则入栈
stack[++top]=t;
else
{
int low=upper_bound(stack,stack+top,t)-stack;//返回第一个大于t的值的位置
stack[low]=t;//并替换之
}
}
printf("%d\n",top);
}
return 0;
}