题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1134

题意: 中文题诶~

思路: 直接暴力的话时间复杂度为O(n^2), 本题数据量为 5e4, 恐怕会超时;

我们维护当前最长的长度len, 用vis[j]存储长度为 j 的所有子序列中最小的末尾数值, 那么对于当前数据 a[i] , 如果数组vis中存在比其大的元素我们用a[i]替换掉vis中第一个比a[i]大的数, 若不存在,那么我们将a[i]加入 vis 末尾, 此时 vis 数组长度加一. 如此我们便维护了数组 vis 的性质, 最终得到的len就是答案了. 因为数组vis是递增的, 所以我们在查找时可以用二分(本人习惯用 upper_bound()), 那么时间复杂度便降为了 O(n*loglen).

代码:

 #include <bits/stdc++.h>
#define MAXN 50010
using namespace std; const int MIN=-1e9; int main(void){
int n, a[MAXN], vis[MAXN], len=; //vis[i]表示长度为i的数列中最小的末尾值
scanf("%d", &n);
for(int i=; i<n; i++){
scanf("%d", &a[i]);
}
for(int i=; i<=n; i++){
vis[i]=MIN; //注意本题数据范围是 -1e9~1e9
}
vis[]=a[];
for(int i=; i<n; i++){
cout << endl;
int pos=upper_bound(vis+, vis+len+, a[i])-vis;
vis[pos]=a[i];
if(len<pos){ //维护最大长度
len=pos;
}
}
printf("%d\n", len);
}

51nod1134(最长递增子序列)的更多相关文章

  1. 51nod--1134 最长递增子序列 (动态规划)

    题目: 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行: ...

  2. 51nod1134 最长递增子序列【动态规划】

    给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行:1个数N ...

  3. 51nod-1134 最长递增子序列,用线段树将N^2的dp降到NlogN

    题目链接 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行 ...

  4. (转载)最长递增子序列 O(NlogN)算法

    原博文:传送门 最长递增子序列(Longest Increasing Subsequence) 下面我们简记为 LIS. 定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序列,则 ...

  5. 最长公共子序列(LCS)和最长递增子序列(LIS)的求解

    一.最长公共子序列 经典的动态规划问题,大概的陈述如下: 给定两个序列a1,a2,a3,a4,a5,a6......和b1,b2,b3,b4,b5,b6.......,要求这样的序列使得c同时是这两个 ...

  6. 最长递增子序列 O(NlogN)算法

    转自:点击打开链接 最长递增子序列,Longest Increasing Subsequence 下面我们简记为 LIS. 排序+LCS算法 以及 DP算法就忽略了,这两个太容易理解了. 假设存在一个 ...

  7. 51nod 1134 最长递增子序列

    题目链接:51nod 1134 最长递增子序列 #include<cstdio> #include<cstring> #include<algorithm> usi ...

  8. 动态规划 - 最长递增子序列(LIS)

    最长递增子序列是动态规划中经典的问题,详细如下: 在一个已知的序列{a1,a2,...,an}中,取出若干数组组成新的序列{ai1,ai2,...,aim},其中下标i1,i2,...,im保持递增, ...

  9. 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹

    一,    最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...

随机推荐

  1. EventDispatcher 事件分发组件

    引言 考虑这样一个问题,现在你想给为你的项目提供一个插件系统,插件可以添加一些方法,或者在某些方法执行之前或者之后做些事情,而不干扰其他插件.要实现这个系统,简单的单继承不是个好办法,即使多继承在PH ...

  2. Install ArchLinux(draft)

    1.# dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync 2. # timedatectl ...

  3. Angularjs -Promise - $http

    https://www.peterbe.com/plog/promises-with-$http

  4. Abp集成Swagger的最佳实践

    1.在项目中添加nuget包 Abp.Web.Api.SwaggerTool 2.在项目Abp模块的DependsOn添加AbpWebApiSwaggerToolModule Run It,启动项目, ...

  5. 1.0、修改MyEclipse字体大小及颜色

    windows-->prefereces->General-->Appearance-->Colors and Fonts,在右边找到要修改的字体或背景,双击点Edit修改即可 ...

  6. 10、代码块、构造代码块、静态代码块及main方法之间的关系

    1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...

  7. 用C#创建Windows服务(Windows Services)

    用C#创建Windows服务(Windows Services) 学习:  第一步:创建服务框架 创建一个新的 Windows 服务项目,可以从Visual C# 工程中选取 Windows 服务(W ...

  8. repeater控件如何隐藏列?

    .aspX文件里将要隐藏的"<td>修改</td>"放在Lable标签里,隐藏实现,如:<asp:lable id=lable1 run=server ...

  9. Decode Ways

    https://leetcode.com/problems/decode-ways/ A message containing letters from A-Z is being encoded to ...

  10. ComboBox数据的绑定

    //带有ComboBox控件点Load事件 private void Library_Load(object sender, EventArgs e) { //创建连接字符串 string strCo ...