最长不下降子序列的o(nlogn)算法
来源:互联网 发布:学生怎么办理淘宝卡 编辑:程序博客网 时间:2024/05/19 00:40
原理
用数组d[k]存储 长度为k的子序列们的最小末尾值
可知d[k]是单调不下降的 所以可以用二分查找
可以用lower_bound实现 但是我二分查找不太好..所以手写二分查找
代码
#include<cstdio>#include<cstring>#include<iostream>using namespace std;int n,a[100010],d[100010];int bin_search(int x,int l,int r){ //返回比他小的 最后一个数 一定要规定r为当前len while(l+1<r){ int mid=(l+r)/2; if(d[mid]<x)l=mid; else r=mid; } if(d[r]<x)l=r; return l;}int main(){ scanf("%d",&n); for(int i=1;i<=n;++i)scanf("%d",&a[i]); int len=0; //len为当前最大长度 d[0]=-0x7fffffff; //很重要 for(int i=1;i<=n;++i){ int k; if(d[len]<a[i])k=++len; else k=bin_search(a[i],0,len)+1; d[k]=a[i];// d[(k-1)+1]一定>=a[i] } cout<<len; //while(1); return 0;}
阅读全文
0 0
- 最长不下降子序列的o(nlogn)算法
- 关于最长不下降子序列O(nlogn)算法
- 最长不下降子序列的O(n^2)算法和O(nlogn)算法
- 最长不下降子序列的O(n^2)算法和O(nlogn)算法
- O(NlogN)的最长不下降子序列LIS
- O(nlogn)求最长不下降子序列
- 最长上升子序列、最长下降子序列的DP算法由O(n^2)到O(nlogn)算法
- 最长上升(下降)子序列 O(nlogn)
- 计蒜客 最长不下降子序列 (nlogn算法)
- 最长不下降子序列nlogn算法详解
- 最长不下降子序列的O(n*logn)算法
- 最长不下降子序列的O(n)算法
- 最长不下降子序列 nlogn
- nlogn 最长不下降子序列
- nlogn 最长不下降子序列
- nlogn 最长不下降子序列
- 最长上升子序列、最长下降子序列的DP算法由O(n^2)到O(nlogn)算法实现及其优化
- 最长递增子序列 O(NlogN)算法
- 微信小程序联盟:官方文档+精品教程+demo集合(6月23日更新……)
- java提高篇(四)-----理解java的三大特性之多态
- 页面向下滚动一定距离显示固定搜索框
- git 命令语句
- C与C++区别(1)
- 最长不下降子序列的o(nlogn)算法
- run results log
- Mysql技术内幕InnoDB存储引擎读书笔记--《三》文件
- git merge 远程两个分支
- 测试那点事----http 错误
- WPF 元素相对另外一个元素的 相对位置
- 优先级反转及解决方法探讨
- postman实战(用户名密码登录类接口)1
- Mac 下打包APK的血泪坑(巨坑,巨巨坑,史前巨坑)