二分求最长上升子序列
来源:互联网 发布:企业qq for mac版 编辑:程序博客网 时间:2024/06/05 08:19
简述
我们知道
然而,我们可以用二分求最长上升子序列。
由于我们知道子序列c,c[1]<c[2]<… <c[n]。
所以我们二分出一个位置t,将c[t]的值更新为a[i]。
如果t>ans,证明最长上升子序列的长度可以+1,于是ans++。
代码
#include<iostream>#include<cstdio>#include<cmath>#define N 100010#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;int i,j,l,n,m,t,s,ans;int a[N],c[N];char ch;int ef(int l,int r,int x){ if (l==r) return l; int mid=(l+r)/2; if (x>c[mid]) return ef(mid+1,r,x);else return ef(l,mid,x);}int main(){ scanf("%d",&n); fo(i,1,n) scanf("%d",&a[i]); c[0]=-2147483647; ans=0; fo(i,1,n) { j=ef(1,ans+1,a[i]); c[j]=a[i]; if (j==ans+1) ans++; } printf("%d",ans); }
2 0
- 二分求最长上升子序列
- 求最长上升子序列
- 求最长上升子序列
- 求最长上升子序列
- 求最长上升子序列
- 求最长上升子序列
- 最长上升子序列 二分优化
- 最长上升子序列 (二分 nlogn)
- Hduoj1025【最长上升子序列 + 二分】
- 最长上升子序列 (二分)
- 最长上升子序列,LIS<DP+二分>
- nlogn求最长上升子序列长度(二分 找序列)
- 动态规划求最长上升子序列
- 求最长的上升子序列
- 求最长上升子序列的长度
- 求最长上升子序列的长度
- STL求最长上升子序列
- lis求最长上升子序列问题
- conda报错:'Could not connect to https://repo.continuum.io/pkgs/pro/linux-64'解决方法
- 执行环境,作用域链、活动对象的关系
- ViewPager自动滚动
- URL Schemes入门指南
- Java内存机制
- 二分求最长上升子序列
- iOS基础知识点温习
- FAAC源码阅读(4)——MPEG的基本原理
- mybatis缓存
- 机器学习(十):PCA
- linux系统下制作fat32格式windows10 U盘启动盘
- Python3.5配置Selenium
- 51nod 1267 4个数和为0
- read tetgen file