LIS 最长严格上升子序列问题
来源:互联网 发布:android ui 设计软件 编辑:程序博客网 时间:2024/05/17 04:59
复习系列
dp做到O(n^2)
二分做到O(nlogn)
具体讲二分
用L[x]数组表示 长为x的序列末尾的数(也就是最大的)
容易得到 L数组单调上升
那么每次读入一个数a时 都可以在L数组里找到比a大的最小的位置
显然这个位置如果是a的话应该是更优的
那用a替换掉它
贴码
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>#include<cstdlib>#include<cmath>#include<map>#include<set>#define ll long longusing namespace std;ll read(){ ll ans=0; bool b=1; char c=getchar(); while(!isdigit(c)) { if(c=='-')b=0; c=getchar(); } while(isdigit(c)) { ans=ans*10+(c-'0'); c=getchar(); } if(b)return ans; else return -ans;}int L[1000001],p;int main(){ //ios::sync_with_stdio(false); int n=read(); for(int i=1;i<=n;i++) { int a=read(); int l=0,r=p,mid=(l+r)>>1; while(l<r) { mid=(l+r)>>1; if(a>L[mid])l=mid+1; else r=mid; } if(L[l]>=a)L[l]=a; else L[++p]=a; } cout<<p; return 0; }
阅读全文
2 0
- LIS 最长严格上升子序列问题
- LIS求解最长上升子序列问题
- 最长上升子序列(LIS)问题
- 最长上升子序列(LIS)问题
- lis求最长上升子序列问题
- 最长上升子序列问题 (LIS)
- 最长上升子序列问题(LIS)
- 最长上升子序列问题LIS
- 最长上升子序列问题(LIS)
- 最长上升子序列问题(LIS)
- 最长上升子序列问题(LIS)
- 最长严格上升子序列
- 最长严格上升子序列
- 最长严格上升子序列
- 最长严格上升子序列
- 最长上升子序列LIS
- 最长上升子序列LIS
- 最长上升子序列(LIS)
- 再补充一些BeautifulSoup的
- NOIP2017模拟赛1
- c++ iterator
- 基于人机交互的智能巡逻车实时控制方式的研究及实现
- 单元三-数组
- LIS 最长严格上升子序列问题
- Java程序分析题一
- OpenJudge 162:Post Office——题解+翻译
- Jacob简介
- ubuntu使用apt-get 出现错误解决方案
- DDR(Deep Direct Regression )算法详解
- 图的m着色问题
- Kali 1 Dr.com虚拟机下KALI上网
- leetcode 508. Most Frequent Subtree Sum