poj 2533 LIS(最长上升序列)

***一道裸题,

思路:在g数组内往里加元素,一直扩大这个数组,每次查询的时候,用二分查找,时间复杂度O(nlog(n))

***

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<queue>
#include<vector>
#include<algorithm>

using namespace std;
typedef long long LL;
#define N 101000
#define INF 0x3f3f3f

int a[N], g[N], d[N];

int main()
{
    int n, k, ans;

    while(~scanf("%d", &n))
    {
        for(int i=0; i<n; i++)
        {
            scanf("%d", &a[i]);
            g[i]=INF;
        }

        ans=0;
        for(int i=0; i<n; i++)
        {
            k=lower_bound(g, g+n, a[i])-g;
            g[k]=a[i];
            ans=max(ans, k);
        }
        printf("%d\n", ans+1);
    }
    return 0;
}
时间: 2024-10-11 09:19:58

poj 2533 LIS(最长上升序列)的相关文章

HDU 1087 &amp;&amp; POJ 2533(DP,最长上升子序列).

~~~~ 两道题的意思差不多,HDU上是求最长上升子序列的和,而POJ上就的是其长度. 貌似还有用二分写的nlogn的算法,不过这俩题n^2就可以过嘛.. ~~~~ 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1087 http://poj.org/problem?id=2533 ~~~~ HDU1087: #include<cstdio> #include<cstring> #include<algorithm> #

N - Longest Ordered Subsequence POJ 2533 (最长上升子序列 )

N - Longest Ordered Subsequence Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2533 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numer

LIS 最长上升序列

#include <iostream> #include <stdlib.h> using namespace std; #define MAX 10000 int num[MAX], n; /*********************************************************************************************** 经典的O(n^2)的动态规划算法,设num[i]表示序列中的第i个数, dp[i]表示从1到i这一段

数据结构与算法学习之路:LIS——最长递增序列的动态规划算法和二分思想算法

一.最长递增序列的问题描述: 求一个整数序列的最长递增子序列,子序列不要求是连续的.例如: Input:4,6,9,6,7,6,3,8,10:Output:5 二.解决方法: 1.用动态规划的方法解决.从问题我们可以知道,我们最终得到的最长递增子序列,其任意一段子序列也是对应序列中的最长子序列.这样说可能不好理解,就以上面的例子来说: 最长子序列为:4,6, 7, 8, 10.在这段子序列的子序列里选一个,例如:4,6,7.则4,6,7也是4,6,9,6,7,6,3这段序列的最长子序列. 对于动

poj 2533 LIS

题目链接:http://poj.org/problem?id=2533 经典问题 最长上升子序列 <挑战程序设计竞赛>原题 #include <cstdio> #include <cstdlib> #include <ctime> #include <iostream> #include <cmath> #include <cstring> #include <algorithm> #include <s

HUD 5773 LIS(最长上升序列)

***关于lower_bound()的用法参见:http://blog.csdn.net/niushuai666/article/details/6734403*** #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<cctype> #include<queue> #include

Longest Ordered Subsequence POJ - 2533 dp 最长上升/不下降 子序列

#include<iostream> using namespace std ; const int N=1010; int f[N]; int a[N]; int n; int main() { cin>>n; for(int i=1; i<=n; i++) cin>>a[i]; for(int i=1; i<=n; i++) { f[i]=1; for(int j=1; j<=i; j++) { if(a[j]<a[i]) { f[i]=ma

POJ 2533 Longest Ordered Subsequence(LIS模版题)

Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 47465   Accepted: 21120 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numeric sequence (a1, a2, ...

poj 3903 &amp; poj 2533 最长上升子序列(LIS)

最长上升子序列. 做这道题之前先做了2533,再看这道题,感觉两道题就一模一样,于是用2533的代码直接交, TLE了: 回头一看,数据范围.2533 N:0~1000:3903 N :1~100000. 原因终归于算法时间复杂度. 也借这道题学习了nlgn的最长上升子序列.(学习链接:http://blog.csdn.net/dangwenliang/article/details/5728363) 下面简单介绍n^2 和 nlgn 的两种算法. n^2: 主要思想:DP: 假设A1,A2..