poj 2533 Longest Ordered Subsequence
2011-07-22 20:14
253 查看
#include<iostream> //最长严格上升子序列(LIS)算法,时间复杂度为O(nlogn) using namespace std; int seq[1002]; //seq[i]是记录在所有最长严格上升子序列的长度为 i 之中,选取结束位置上最小的值 int main() { int n,p; cin>>n>>p; int rear=0; seq[++rear]=p; while(--n) { cin>>p; if(p>seq[rear]) //当p==seq[rear],不能压入最长严格上升子序列中 seq[++rear]=p; else { int s=1,t=rear,mid; //在最长严格上升子序列中找到第一个大于p的数,并用p替换之。但如果有相同的元素已经在子序列出现,比如子序列是 3 4 , 要插入的值 p=3, 则子序列仍旧是 3 4 ,即插入的位置是相同的那个元素出现的位置(也就是不做任何改变) while(s<t) { mid=(s+t)/2; if(seq[mid]<p) s=mid+1; else //当seq[mid]==p时, t=mid, 因为若有相同元素出现,p要替换的并不是比p大的那个数,而是相同的那个数(即不做改变) t=mid; } seq[s]=p; } } cout<<rear<<endl; //最长严格上升子序列的长度 return 0; }
相关文章推荐
- Poj 2533-Longest Ordered Subsequence(最长有序子序列)
- POJ 2533 Longest Ordered Subsequence [DIS]
- POJ 2533-Longest Ordered Subsequence(裸LIS)
- poj2533 Longest Ordered Subsequence
- POJ 2533 Longest Ordered Subsequence
- Longest Ordered Subsequence POJ - 2533
- POJ 2533 : Longest Ordered Subsequence
- POJ 2533 Longest Ordered Subsequence 最长上升子序列
- poj 2533 Longest Ordered Subsequence 最长递增子序列
- poj_2533 Longest Ordered Subsequence(最长上升子序列)
- poj_2533:Longest Ordered Subsequence
- POJ 3903-Stock Exchange/POJ 2533-Longest Ordered Subsequence(LIS-最长递增子序列长度)
- POJ 2533: Longest Ordered Subsequence
- POJ 2533 Longest Ordered Subsequence
- POJ 2533 - Longest Ordered Subsequence
- POJ 2533 Longest Ordered Subsequence(最长上升子序列(NlogN)
- POJ 2533 Longest Ordered Subsequence(最长上升子序列O(n*n)解法)
- poj-2533 Longest Ordered Subsequence(最长递增子序列)
- 【poj 2533】Longest Ordered Subsequence 题意&题解&代码(C++)
- POJ-2533-Longest Ordered Subsequence