最长递增子序列nlogn的做法
费了好大劲写完的 用线段树维护的 nlogn的做法
再看了一下 大神们写的 nlogn 额差的好远
我写的又多又慢 大神们写的又少又快
时间 空间 代码量 哪个都赶不上大佬们的代码
//这是我写的
#include<iostream>
#include<stdio.h>
#include<map>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = ;
int a[maxn];
int val[maxn<<];
vector<int>v;
int getid(int x){
return lower_bound(v.begin(),v.end(),x)-v.begin()+;
}
int query(int L,int R,int l,int r,int rt){
if(L<=l&&r<=R)return val[rt];
int m=(l+r)>>;int t=;
if(L<=m)t=max(t,query(L,R,l,m,rt<<));
if(R>m)t=max(t,query(L,R,m+,r,rt<<|));
return t;
}
void update(int x,int l,int r,int rt,int vv){
if(l==r){
val[rt]=vv;
}else{
int m=(l+r)>>;
if(x<=m)update(x,l,m,rt<<,vv);
else update(x,m+,r,rt<<|,vv);
val[rt]=max(val[rt<<],val[rt<<|]);
}
}
int main()
{
int n,ans=;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",a+i);
v.push_back(a[i]);
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
for(int i=;i<=n;i++){
int t=getid(a[i]);
int vv=query(,t,,v.size(),)+;
ans=max(ans,vv);
update(t,,v.size(),,vv);
}
printf("%d\n",ans);
return ;
}
//这是大神们的
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<cmath>
using namespace std;
typedef __int64 ll;
#define maxn 50050
ll a[maxn],dp[maxn];
int main(){
int n;
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%I64d",&a[i]),dp[i]=;
int len=;
for(int i=;i<=n;i++){
if(i==){
dp[++len]=a[i];
}
else{
if(a[i]>dp[len]){
dp[++len]=a[i];
}
else{
int pos=lower_bound(dp+,dp+len+,a[i])-dp;
dp[pos]=a[i];
}
}
}
printf("%d\n",len);
}
最长递增子序列nlogn的做法的更多相关文章
- HDU-1160-FatMouse's Speed(DP, 最长递增子序列)
链接: https://vjudge.net/problem/HDU-1160 题意: FatMouse believes that the fatter a mouse is, the faster ...
- (转载)最长递增子序列 O(NlogN)算法
原博文:传送门 最长递增子序列(Longest Increasing Subsequence) 下面我们简记为 LIS. 定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序列,则 ...
- 最长递增子序列 O(NlogN)算法
转自:点击打开链接 最长递增子序列,Longest Increasing Subsequence 下面我们简记为 LIS. 排序+LCS算法 以及 DP算法就忽略了,这两个太容易理解了. 假设存在一个 ...
- 最长递增子序列 LIS 时间复杂度O(nlogn)的Java实现
关于最长递增子序列时间复杂度O(n^2)的实现方法在博客http://blog.csdn.net/iniegang/article/details/47379873(最长递增子序列 Java实现)中已 ...
- 51nod-1134 最长递增子序列,用线段树将N^2的dp降到NlogN
题目链接 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行 ...
- 【LeetCode】300.最长递增子序列——暴力递归(O(n^3)),动态规划(O(n^2)),动态规划+二分法(O(nlogn))
算法新手,刷力扣遇到这题,搞了半天终于搞懂了,来这记录一下,欢迎大家交流指点. 题目描述: 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度. 子序列是由数组派生而来的序列,删除(或不删 ...
- POJ2533 最长递增子序列
描述: 7 1 7 3 5 9 4 8 输出4 最长递增子序列为1 3 5 9,不必连续. 解法: 三种思路: 转化为最长公共子序列(n^2),动态规划(n^2),不知叫什么解法(nlogn). 解法 ...
- LIS 最长递增子序列
一.最长公共子序列 经典的动态规划问题,大概的陈述如下: 给定两个序列a1,a2,a3,a4,a5,a6......和b1,b2,b3,b4,b5,b6.......,要求这样的序列使得c同时是这两个 ...
- 最长递增子序列LIS再谈
DP模型: d(i) 以第 i 个元素结尾的最长递增子序列的长度. 那么就有 d(i) = max(d(j)) + 1;(j<i&&a[j]<a[i]),答案 max(d( ...
随机推荐
- 实用maven笔记一概念&构建
maven,作为我现在每天都会使用的工具,却发现我还有很多地方了解的迷迷糊糊.老大就曾说过我的一个问题在于,做事情不够精细.大概就是太浮于表面吧.最近突然非常想把maven撸一遍.豆瓣搜了下高分书籍, ...
- Vertical-Align,你应该知道的一切
我们聊聊vertical-align.这个属性主要目的用于将相邻的文本与元素对齐.而实际上,verticle-algin可以在不同上下文中灵活地对齐元素,以及进行细粒度的控制,不必知道元素的大小.元素 ...
- 把我坑惨的一个MySQL双引号!
来源:For DBA www.fordba.com/mysql-double-quotation-marks-accident.html 一.前言 最近经常碰到开发误删除误更新数据,这不,他们又给我找 ...
- python调用tushare的pro_bar通用行情接口
接口名称:pro_bar 更新时间:股票和指数通常在15点-17点之间,数字货币实时更新,具体请参考各接口文档明细. 描述:目前整合了股票(未复权.前复权.后复权).指数.数字货币.ETF基金.期货. ...
- Java面试宝典(5)算法
二.算法与编程 1.编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔. 答: pack ...
- android中SharedPreferences
SharedPreferences:用于存储少量并且数据格式简单,基本上都是普通的字符串,标量类型的值,比如:应用程序的各种配置信息等. SharedPreferences:保存的数据格式主要是key ...
- [转载]图文详解YUV420数据格式
原博主的博客为:https://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html YUV格式有两大类:planar和packed.对于p ...
- 前端学习(八)sass和bootstrap(笔记)
less sass 和less基本上70%差不多(书写方式不一样) sass功能更多一点 1.定义一个变量 $b:blue; div{width:100px;height:100px; backgro ...
- Eclipse中发布Maven管理的Web项目时找不到类的问题根源和解决办法(转)
转自:http://blog.csdn.net/lvguanming/article/details/37812579?locationNum=12 写在前面的话 现在是越来越太原讨厌Eclipse这 ...
- Eclipse编辑Spring配置文件xml时自动提示类class包名
第一步,先查看下自己的Eclipse是什么版本,步骤如下: 1.1 点击Eclipse菜单‘Help -> About Eclipse’,如下图: 1.2 点击Eclipse图标如下,看清楚哦 ...