您的位置:首页 > 其它

最长单调递增子序列(二分查找优化)

2011-05-09 20:57 405 查看
优化后,不需要再定义一个数组存放当前元素最长序列的长度,而是在输入数据的同时进行最长序列的存放。



缺点:存放后的数组只是长度为最长序列的长度,但是元素的内容却不是最长序列的内容,若需要记录最长序列的排序,则需要另外一个数组用于记录。



#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int data[100010];
int main()
{
	int n;
	while(scanf("%d", &n) != EOF)
	{
		int res = 1;
		for(int i = 0; i < n; i++)
		{
			scanf("%d", &data[i]);
			int *pos = lower_bound(data, data + res, data[i]);
			if(res == pos - data)
				res++;
			*pos = data[i];
		}
		cout<<res<<endl;
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: