poj 3903 Stock Exchange
2012-03-13 10:02
246 查看
#include<iostream> //最长严格上升子序列(LIS)算法,时间复杂度为O(nlogn) using namespace std; int seq[100010]; //seq[i]是记录在所有最长严格上升子序列的长度为 i 之中,选取结束位置上最小的值 int main() { int n,p; while(cin>>n) { cin>>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 3903 Stock Exchange
- poj 3903 Stock Exchange
- POJ - 3903 Stock Exchange(LIS最长上升子序列问题)
- POJ 3903 Stock Exchange 解题心得
- POJ 3903 Stock Exchange 最长上升子序列
- Poj 3903 Stock Exchange(LIS)
- POJ - 3903-Stock Exchange(LIS二分模板题)
- Poj 3903 Stock Exchange(LIS)
- poj 3903 Stock Exchange
- POJ 题目3903 Stock Exchange(LIC)
- POJ 3903 Stock Exchange
- POJ 3903 Stock Exchange (LIS:最长上升子序列)
- POJ 3903 Stock Exchange【LIS 二分查找】
- POJ 3903 Stock Exchange
- poj 3903 stock exchange 最长上升子序列(n*log(n))
- poj3903 Stock Exchange(最长上升子序列)
- POJ 3903 Stock Exchange(LIS)
- LIS(nlogn) POJ 3903 Stock Exchange
- POJ 3903 Stock Exchange
- ACM篇:POJ 3903--Stock Exchange