最长非上升/非下降子序列(O(nlogn)非连续)
来源:互联网 发布:淘宝店铺质检报告没有 编辑:程序博客网 时间:2024/05/16 15:03
直接上代码,在其他大佬那看的·,当做个模板。
#include<stdio.h>#define N 101000int s[N],a[N],d[N];int f1(int x,int l,int r){ int m; while(l<r) { m=(l+r)/2; if(s[m]>x) r=m; else l=m+1; } return l;}int f2(int x,int l,int r){ int m; while(l<r) { m=(l+r)/2; if(d[m]>=x) l=m+1; else r=m; } return l;}int main(){ int ls,ld,i,j,t,n,ans; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); s[1]=d[1]=a[1]; ls=ld=1; for(i=2;i<=n;i++) { if(a[i]>=s[ls])//上升序列 ans=++ls; else ans=f1(a[i],1,ls); s[ans]=a[i]; if(a[i]<=d[ld]) ans=++ld; else ans=f2(a[i],1,ld-1); d[ans]=a[i]; } for(i=1;i<=ls;i++)//非下降子序列 printf("%d ",s[i]); printf("\n"); for(i=1;i<=ld;i++)//非上升子序列 printf("%d ",d[i]); printf("\n"); } return 0; }
阅读全文
0 0
- 最长非上升/非下降子序列(O(nlogn)非连续)
- 最长上升子序列(非连续)
- 最长上升子序列 最长下降子序列 (非严格)
- 最大上升、下降、非上升、非下降子序列 -- n²与nlogn
- 最长上升(下降)子序列 O(nlogn)
- 蓝桥杯 算法训练 拦截导弹【最长上升子序列 & 最长非下降子序列 nlogn 和 n^2】
- POJ3670Eating Together(LIS最长(非)上升(下降)子序列模板)
- 最长非上升子序列
- 最长上升子序列的O(nlogn)搞法
- 动态规划 之 最长公共子序列(非连续)
- LCS 最长公共子序列问题(非连续的)
- 单调递增最长子序列(非连续)
- hdu4604 最长上升,下降子序列nlogn
- 求最长上升/下降子序列【O(nlgn)】
- 最长递增子序列(非连续)
- 最长公共子序列(非连续)
- 最长上升子序列 (二分 nlogn)
- 最长上升子序列详解(nlogn)
- Linux: mv, rename单次及批次修改档案名称及后缀(批量修改文件名)
- xgboost原理及应用
- BZOJ4121 乱搞
- c++学习之 类中的常成员与静态成员
- 卷积网络深度和宽度修改(一)
- 最长非上升/非下降子序列(O(nlogn)非连续)
- Head First Java 39页猜数字游戏中的错误。
- Vue学习之源码分析--Vue.js异步更新DOM策略及nextTick(八)
- [agc009e]Eternal Average
- Socket
- 细说mysql索引
- Integer与int的比较
- 分库、分表、集群、负载均衡
- Jenkins中Git Timeout错误