最大上升子序列(从前往后) nlogn 和最大上升序列(从后往前)
来源:互联网 发布:淘宝学生女装店 知乎 编辑:程序博客网 时间:2024/05/18 02:14
#include<bits/stdc++.h>using namespace std;const int N = 1e5+10;int arr[N],len1[N],len2[N];int len,ans[N];int tot;int T[N];int ls[N*20],rs[N*20],sum[N*20];int binary_search(int i){int left,right,mid;left=1,right=len;while(left<=right){mid=(left+right)/2;if(arr[i]<ans[mid]) left=mid+1;else right=mid-1;}return left;}int main(){int t;scanf("%d",&t);while(t--){int n,k;scanf("%d%d",&n,&k);for(int i=1;i<=n;i++)scanf("%d",&arr[i]);ans[1]=arr[1];len1[1]=1;len=1;for(int i=2;i<=n;i++){if(arr[i]>ans[len])ans[++len]=arr[i],len1[i]=len;else{int pos=lower_bound(ans,ans+len,arr[i])-ans; ans[pos]=arr[i];len1[i]=pos;}}ans[1]=arr[n];len2[n]=1;len=1;for(int i=n-1;i>=1;i--){if(arr[i]<ans[len])ans[++len]=arr[i],len2[i]=len;else{int pos=binary_search(i);ans[pos]=arr[i];len2[i]=pos;}}// for(int i=n;i>=1;i++)// update(T[i-1],T[i],i,val)}}
1 2 1 2 1
从前往后 1 2 1 2 1
从后往前 2 1 2 1 1
阅读全文
0 0
- 最大上升子序列(从前往后) nlogn 和最大上升序列(从后往前)
- 最大上升子序列和
- 最大上升子序列和
- 最大上升子序列和
- 最大上升子序列和
- 最大上升子序列和
- 最大上升子序列和
- 最大上升子序列和
- 最大上升子序列和
- 最大上升子序列
- 最大上升子序列
- 最大上升子序列
- 最大上升子序列
- 最长上升子序列&最大上升子序列和
- HDU 1257 (最大上升子序列)
- 最大上升(下降)子序列 小节
- hdu1087最长(最大)上升子序列
- 最大上升子序列LIS(Java)
- [C/C++标准库]_[初级]_[移除反转枚举reverse_iterator]
- JavaScript忍者秘籍笔记01之函数
- go install 基本使用
- 51Nod-1137-矩阵乘法
- 1049. 数列的片段和(20)
- 最大上升子序列(从前往后) nlogn 和最大上升序列(从后往前)
- 数组·1·素数对猜想
- 用Python+StanfordCoreNLP做中文命名实体分析
- path-sum
- mybatis-config.xml配置文件
- 后台运行VirtualBox虚拟机
- 修改hexo的主题nexT中的Pisces主题宽度
- 【AssetBundle】ab释放导致Texture多份
- 安装IPython Notepad