HDU 1950 Bridging signals(O(nlogn)算法LIS)
2015-04-07 17:52
295 查看
给出多个序列,求每个序列的最长上升子序列(LIS:Longest Increasing Subsequence)。
紫书上只给出了LIS的O(n^2)算法,百度O(nlogn)算法,顺便出了这道。遍历数组,用数组储存每个上升子序列的最小结尾。对当前数二分查找求下界,替换原结尾。
紫书上只给出了LIS的O(n^2)算法,百度O(nlogn)算法,顺便出了这道。遍历数组,用数组储存每个上升子序列的最小结尾。对当前数二分查找求下界,替换原结尾。
#include<iostream> #include<algorithm> using namespace std; const int maxn=40010; int a[maxn],ans[maxn],len; int main(){ ios::sync_with_stdio(false); int t; cin>>t; while(t--){ int n; cin>>n; for(int i=1;i<=n;++i) cin>>a[i]; ans[1]=a[1]; len=1; for(int i=2;i<=n;++i) if(a[i]>ans[len]) ans[++len]=a[i]; else{ int pos=lower_bound(ans,ans+len,a[i])-ans; ans[pos]=a[i]; } cout<<len<<endl; } return 0; }
相关文章推荐
- HDU-1950-Bridging signals【最长上升子序列(LIS)长度的O(nlogn)算法】
- hdu 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列(LIS)O(nlogn)算法)
- hdu 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列(LIS)O(nlogn)算法)
- HDU 1950 Bridging signals (LIS,O(nlogn))
- HDU-1950 Bridging signals (nlogn求LIS)
- HDU 1025 Constructing Roads In JGShining's Kingdom(LIS的O(nlogn)算法)
- HDU 1950 Bridging signals(LIS nlogn)
- hdu 1950 Bridging signals【LIS nlogn】
- HDU 1950 LIS(nlogn)
- poj 1631 || hdu 1950 Bridging signals(动态规划:LIS)
- Poj 1631 && Hdu 1950 Bridging signals【LIS】
- HDU 1950(Bridging signals)最长不降子序列nlogn
- 最长上升子序列(LIS)长度的O(nlogn)算法
- HDU 1950 Bridging signals (DP动态规划 + 二分搜索 O(nlogn) )
- 最长上升子序列(LIS)长度的O(n^2)与O(nlogn)算法
- HDU 1950 Bridging signals(LIS)
- hdu 1025 Constructing Roads In JGShining's Kingdom 深夜又一波DP,最长上升子序列(O(nlogn)算法)!尼玛坑爹的输出啊!!
- 用O(nlogn)的算法实现最大上升子序列(LIS)输出.
- LIS (nlogn)的算法
- hdu----(1950)Bridging signals(最长递增子序列 (LIS) )