最长递增序列
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int tmp[100010],lt;
int main()
{
int n,i,j,mi,ma,mid,t;
while (scanf("%d",&n) != EOF)
{
lt=0;
tmp[lt]=-99999999;
for (i=0; i<n; i++)
{
scanf("%d",&t);
if (t > tmp[lt])
{
lt++;
tmp[lt]=t;
}
else
{
mi=1;
ma=lt;
mid=(mi+ma)>>1;
while (mi <= ma)
{
mid=(mi+ma)>>1;
if (tmp[mid] < t)
{
mi=mid+1;
}
else
{
ma=mid-1;
}
}
tmp[mi]=t;
}
}
printf("%d\n",lt);
}
}

本文介绍了一种求解最长递增子序列问题的有效算法。通过动态规划思想结合二分查找技巧实现,代码中详细展示了如何针对输入序列找出最长递增子序列的长度。适用于面试准备和技术分享。

被折叠的 条评论
为什么被折叠?



