POJ3903 Stock Exchange LIS最长上升子序列

POJ3903 Stock Exchange

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <vector>
 4 #include <algorithm>
 5 using namespace std;
 6 const int maxn = 1e5+5;
 7 int a[maxn];
 8 int main() {
 9     int n;
10     while (~scanf("%d",&n)) {
11         for (int i = 1; i <= n; ++i) scanf("%d",&a[i]);
12         vector<int> ve;
13         ve.push_back(a[1]);
14         for (int i = 2; i <= n; ++i) {
15             if (ve[ve.size()-1] < a[i]) {
16                 // 如果新进来的数比最后一个数大,那么直接插入
17                 ve.push_back(a[i]);
18             }
19             else {
20                 ve[lower_bound(ve.begin(),ve.end(),a[i])-ve.begin()] = a[i];
21             }
22         }
23         printf("%d\n",ve.size());
24     }
25     return 0;
26 }

原文地址:https://www.cnblogs.com/wstong/p/11778374.html

时间: 2024-10-11 18:59:23

POJ3903 Stock Exchange LIS最长上升子序列的相关文章

POJ 3903 Stock Exchange (LIS:最长上升子序列)

POJ 3903Stock Exchange (LIS:最长上升子序列) http://poj.org/problem?id=3903 题意: 给你一个长度为n (n<=100000) 的数字序列, 要你求该序列中的最长(严格)上升子序列的长度. 分析: 由于n的规模达到10W, 所以只能用O(nlogn)的算法求. 令g[i]==x表示当前遍历到的长度为i的所有最长上升子序列中的最小序列末尾值为x.(如果到目前为止, 根本不存在长i的上升序列, 那么x==INF无穷大) 假设当前遍历到了第j个

poj3903 Stock Exchange(最长上升子序列)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:id=3903">http://poj.org/problem?id=3903 Description The world financial crisis is quite a subject. Some people are more relaxed while others are quite anxious. John is one of them. He is very concerned

poj 3903 Stock Exchange(最长上升子序列,模版题)

题目 #include<stdio.h> //最长上升子序列 nlogn //入口参数:数组名+数组长度,类型不限,结构体类型可以通过重载运算符实现 //数组下标从1号开始. int bsearch(int a[],int len,int num) { int left=1,right=len; while(left<=right) { int mid=(left+right)/2; if(num<=a[mid]) //若最长不下降子序列,改<= 为 < right=m

{POJ}{3903}{Stock Exchange}{nlogn 最长上升子序列}

题意:求最长上升子序列,n=100000 思路:O(N^2)铁定超时啊....利用贪心的思想去找答案.利用栈,每次输入数据检查栈,二分查找替换掉最小比他大的数据,这样得到的栈就是更优的.这个题目确实不错,思路很好 #include <iostream> #include <string> #include <cstring> #include <cstdio> #include <algorithm> #include <memory>

POJ 3903 Stock Exchange 【最长上升子序列】模板题

题目链接:http://poj.org/problem?id=3903 转载于:https://www.cnblogs.com/GodA/p/5180560.html 题目大意: 裸的DP最长上升子序列,给你一段序列,求其最长上升子序列的长度,n^2的dp朴素算法过不了,这里用的是nlogn的算法,用了二分查找. 具体算法思路解析: 学习动态规划问题(DP问题)中,其中有一个知识点叫最长上升子序列(longest  increasing subsequence),也可以叫最长非降序子序列,简称L

POJ - 3903 Stock Exchange(LIS最长上升子序列问题)

E - LIS Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Description The world financial crisis is quite a subject. Some people are more relaxed while others are quite anxious. John is one of them. He is very concerned abo

poj3903 Stock Exchange最大上升子序列

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://poj.org/problem?id=3903 Description The world financial crisis is quite a subject. Some people are more relaxed while others are quite anxious. John is one of them. He is very concerned about the ev

hdu 5256 序列变换(LIS最长上升子序列)

Problem Description 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元素都必须是整数. 请输出最少需要修改多少个元素. Input 第一行输入一个T(1≤T≤10),表示有多少组数据 每一组数据: 第一行输入一个N(1≤N≤105),表示数列的长度 第二行输入N个数A1,A2,...,An. 每一个数列中的元素都是正整数而且不超过106. Output 对于每组数据,先输出一行 Case #i: 然后输出

POJ 1887 Testingthe CATCHER (LIS:最长下降子序列)

POJ 1887Testingthe CATCHER (LIS:最长下降子序列) http://poj.org/problem?id=3903 题意: 给你一个长度为n (n<=200000) 的数字序列, 要你求该序列中的最长(严格)下降子序列的长度. 分析:        读取全部输入, 将原始数组逆向, 然后求最长严格上升子序列就可以. 因为n的规模达到20W, 所以仅仅能用O(nlogn)的算法求.        令g[i]==x表示当前遍历到的长度为i的全部最长上升子序列中的最小序列末