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. 【线段树查询区间最值】poj 3264 Balanced Lineup

    #include<cstdio> #include<algorithm> using namespace std; ; struct Seg { int l,r,mi,ma; ...

  2. dockerfile各种命令解析

    1.ADD命令,如果ADD的是压缩包,ADD之后会自动进行解压.....

  3. oracle连接封装方法

    public static void updateSqlOracle(String sqlstr,String linkIP,String username,String password) thro ...

  4. Java面试题集(四)

    二. Java Web基础部分 在js中如何创建一个对象? var p1={name:”tom”,”age”:12}; function Person(name,age){ this.name=nam ...

  5. ORACLE RMAN增量备份经典理解

    http://blog.itpub.net/26118480/viewspace-1793548/

  6. meta标签集

    html中的meta总结: 0.声明文档使用的字符编码: <meta charset='utf-8'/> 1.优先使用 IE 最新版本和 Chrome : <meta http-eq ...

  7. Hdu5921 Binary Indexed Tree

    Hdu5921 Binary Indexed Tree 思路 计数问题,题目重点在于二进制下1的次数的统计,很多题解用了数位DP来辅助计算,定义g(i)表示i的二进制中1的个数, $ans = \su ...

  8. 实现TTCP (检测TCP吞吐量)

    实现TTCP (检测TCP吞吐量) 应用层协议 为了解决TCP粘包问题以及客户端阻塞问题 设计的应用层协议如下: //告知要发送的数据包个数和长度 struct SessionMessage { in ...

  9. android 按两次物理返回键退出程序

    <?xml version="1.0" encoding="utf-8"?> <!-- 定义当前布局的基本LinearLayout --> ...

  10. linxu下的shell脚本加密,shell生成二机制可执行文件

    再安全的加密也抵不过逆向,斗智斗勇吧,持续加密持续破解 1.简单的加密:gzexe file.sh 2.使用shc加密:下载地址:http://www.datsi.fi.upm.es/~frosal/ ...