求最长上升子序列
来源:互联网 发布:get it beauty self 编辑:程序博客网 时间:2024/05/22 15:31
求最长上升子序列的LIS算法
(nlogn)
主要思想就是开一个数组用来记录当长度为len时的最小的数a[i]
由于d数组是从小到大排列的,所以可以用二分法
//sort LIS#include<cstdio>#include<iostream>#include<cstring>#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;const int T=100001;int n,len=1;int a[T],d[T];int erfen(int x){ int l=1,r=len,mid; while(l<=r) { mid=(l+r)>>1; if(d[mid-1]<x && x<=d[mid]) return mid; else if(x>d[mid]) l=mid+1; else r=mid-1; }}int main(){ int i,j,k; scanf("%d",&n); fo(i,1,n) scanf("%d",&a[i]); d[1]=a[1]; fo(i,2,n) { if(a[i]>d[len]) j=++len; else if(a[i]<d[1]) j=1; else j=erfen(a[i]); d[j]=a[i]; } printf("%d\n",len); return 0;}
1 0
- 求最长上升子序列
- 求最长上升子序列
- 求最长上升子序列
- 求最长上升子序列
- 求最长上升子序列
- 动态规划求最长上升子序列
- 求最长的上升子序列
- 求最长上升子序列的长度
- 求最长上升子序列的长度
- STL求最长上升子序列
- lis求最长上升子序列问题
- 动态规划:求最长上升子序列
- 求最长上升不一定连续子序列
- 二分求最长上升子序列
- 求最长上升子序列的问题
- LIS 求最长上升子序列长度
- 动态规划----求最长上升子序列
- 最长上升子序列
- 安全观察:浅谈WAF几种常见的部署模式
- Ubuntu怎样安装无线网卡驱动解决无线网不能连接
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- 上拉刷新下拉加载xlistview_header
- 上拉刷新下拉加载xlistview_footer
- 求最长上升子序列
- 苹果iOS系统下的推送机制及实现
- nodejs经典高并发
- 【JZOJ4624】字符串匹配
- 日夜间模式切换
- python学习——多重继承
- 图文混排
- 5 个免费的项目管理工具推荐
- 【APIO2016】字符串匹配