LIS nlogn模板 http://acm.hdu.edu.cn/showproblem.php?pid=1950

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string>
#include <math.h>
#include <stdlib.h>
#define maxn 40000+10
using namespace std;
int a[maxn],d[maxn],len;
int bs(int i){
int l,r,mid;
l=,r=len;
while(l<r){
mid=(l+r)/;
if(d[mid]>=a[i])r=mid;
else l=mid+;
}
return l;
}
int main(){
int T,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
d[]=a[];
len=;
for(int i=;i<=n;i++){
if(a[i]>d[len])
d[++len]=a[i];
else{
int pos=lower_bound(d,d+len,a[i])-d;
d[pos]=a[i];//找到>=a[i]的并更新
}
}
printf("%d\n",len);
}
return ;
}

LIS n^2模板  http://poj.org/problem?id=2533

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#define INF 0x3f3f3f3f
#define maxn 10000+10
using namespace std;
int a[maxn],n,dp[maxn];
int main()
{
while(cin>>n){
int len=-;
for(int i=;i<=n;i++)scanf("%d",&a[i]);
dp[]=-INF;
for(int i=;i<=n;i++){
dp[i]=;
for(int j=;j<i;j++){
if(a[i]>a[j])//满足条件时
dp[i]=max(dp[i],dp[j]+);
if(dp[i]>len)len=dp[i];
}
}
printf("%d\n",len);
}
return ;
}

LIS n^2&nlogn模板的更多相关文章

  1. 最长上升子序列(LIS)nlogn模板

    参考https://www.cnblogs.com/yuelian/p/8745807.html 注意最长上升子序列用lower_bound,最长不下降子序列用upper_bound 比如123458 ...

  2. uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))

    标题效果:有两个长度p+1和q+1该序列.的各种元素的每个序列不是相互同.并1~n^2之间的整数.个序列的第一个元素均为1. 求出A和B的最长公共子序列长度. 分析:本题是LCS问题,可是p*q< ...

  3. 最长递增子序列 LIS 时间复杂度O(nlogn)的Java实现

    关于最长递增子序列时间复杂度O(n^2)的实现方法在博客http://blog.csdn.net/iniegang/article/details/47379873(最长递增子序列 Java实现)中已 ...

  4. HDU 1950 Bridging signals (LIS,O(nlogn))

    题意: 给一个数字序列,要求找到LIS,输出其长度. 思路: 扫一遍+二分,复杂度O(nlogn),空间复杂度O(n). 具体方法:增加一个数组,用d[i]表示长度为 i 的递增子序列的最后一个元素, ...

  5. LIS的O(nlogn)算法

    出自蓝书<算法竞赛入门经典训练指南> 求最长上升子序列是很常见的可以用动态规划解决的问题…… 很容易根据最优子结构之类的东西得出 $\text{dp}[i]$为以第i个数结尾的最长上升子序 ...

  6. What Goes Up UVA - 481 LIS+打印路径 【模板】

    打印严格上升子序列: #include<iostream> #include<cstdio> #include<algorithm> #include<cst ...

  7. nlogn LIS模板

    nlogn 模板 最长上升 #include<bits/stdc++.h> using namespace std; ; int n,x,y,a[N],num[N],d[N],len; / ...

  8. LIS LCS n^2和nlogn解法 以及LCIS

    首先介绍一下LIS和LCS的DP解法O(N^2) LCS:两个有序序列a和b,求他们公共子序列的最大长度 我们定义一个数组DP[i][j],表示的是a的前i项和b的前j项的最大公共子序列的长度,那么由 ...

  9. 关于LIS和LCS问题的o(nlogn)解法

    o(n^2)解法就不赘述了,直接解释o(nlogn)解法 LIS最长递增子序列: 先明确一个结论:在长度最大为len的递增序列里若末尾元素越小,该递增序列越容易和后面的子序列构造出一个更长的递增子序列 ...

随机推荐

  1. leetcode 376

    利用贪心思想,每次都得到到当前数最长的长度,和与当前数链接的前一个数之间差的符号 class Solution { public: int wiggleMaxLength(vector<int& ...

  2. 转:WOM 编码与一次写入型存储器的重复使用

    转自:WOM 编码与一次写入型存储器的重复使用 (很有趣的算法设计)——来自 Matrix67: The Aha Moments 大神 计算机历史上,很多存储器的写入操作都是一次性的. Wikiped ...

  3. Ubuntu 下使用 sshfs 挂载远程目录到本地

    参考链接:http://blog.csdn.net/netwalk/article/details/12952719 一.Ubuntu 上安装sshfs Ubuntu源中已经包含了sshfs,以及所需 ...

  4. MySQL中blob 与 text

    BLOB是一个二进制大对象,可以容纳可变数量的数据.有4种BLOB类型:TINYBLOB.BLOB.MEDIUMBLOB和LONGBLOB.它们只是可容纳值的最大长度不同. 有4种TEXT类型:TIN ...

  5. go gin框架 static 静态文件

    项目结构: DemoPro: .. .. static/ test.txt .. router := gin.Default() router.Static("/static", ...

  6. 【编码】封装RedisPubSub工具

    基本介绍 核心原理:利用Redis的List列表实现,发布事件对应rpush,订阅事件对应lpop 问题一:Redis不是自带Pub/Sub吗? redis自带的pub/sub有两个问题: 1.如果发 ...

  7. codevs 2964公共素数因数

    2964 公共素数因数  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 小单同学刚学习了一个数分解成几个素 ...

  8. java通过反射获取bean字段注解@Column中的信息

    直接上代码吧: Field field; Field[] fields=clas.getDeclaredFields(); for (int i = 0; i <fields.length ; ...

  9. Go -- 判断chan channel是否关闭的方法

    如果不判断chan是否关闭 Notice: 以下代码会产生死循环 代码如下: package main import ( "fmt" ) func main() { c := ma ...

  10. C#代码调用页面javascript函数

    C#代码调用javascript函数   前台<%@ Page Language="C#" AutoEventWireup="true" CodeFile ...