最长上升子序列

来源:互联网 发布:振华重工 知乎 编辑:程序博客网 时间:2024/06/06 06:45

今天参加北航的夏令营,推免生的一道上机考试题目:最长上升子序列,晚上看了一下题解,写了一下代码。

总结程序思路:

用栈的路:每次取得栈顶的元素和读到的元素作比较,如果大于,入栈;如果小于,二分查找栈中比他大的第一个元素,替换他。

最大长度是最后模拟栈的元素的个数。

代码如下:

#include <stdio.h>int i,j,n,s,t,a[10000001];int main(){scanf("%d",&n);a[0]=-100000;for(i=0;i<n;i++){scanf("%d",&t);if(t>a[s]) a[++s]=t;else{int l=1,r=s,m;while(l<=r){m=(r+l)/2;if(t>a[m]) l=m+1;else r=m-1;}a[l]=t;}}printf("%d\n",s);return 0;}



0 0
原创粉丝点击