UVa1471 LIS变种 nlgn
来源:互联网 发布:java空指针异常 编辑:程序博客网 时间:2024/06/04 18:27
//#include<bits/stdc++.h>#include<stdio.h>#include<algorithm>#include<queue>#include<string.h>#include<iostream>#include<math.h>#include<set>#include<map>#include<vector>#include<iomanip>using namespace std;#define ll long long#define pb push_backconst int maxn=2e5+9;int f[maxn];//以i开头的长度int g[maxn];//以i结尾的长度int d[maxn];const int inf=0x3f3f3f3f;int arr[maxn];int main(){int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&arr[i]);f[1]=1;for(int i=2;i<=n;i++){if(arr[i]>arr[i-1])f[i]=f[i-1]+1;else f[i]=1;}g[n]=1;for(int i=n-1;i>=1;i--){if(arr[i]<arr[i+1])g[i]=g[i+1]+1;else g[i]=1;}int ans=0;for(int i=1;i<=n;i++)d[i]=inf;//长度i的头所需代价for(int i=1;i<=n;i++){int len=(lower_bound(d+1,d+1+i,arr[i])-(d+1))+g[i];ans=max(ans,len);d[f[i]]=min(arr[i],d[f[i]]);}printf("%d\n",ans);}}
d数组性质就是同样的长度存最小的开始点,维护数组前部的一个理想前半
长度增长1数值至少加1,d数组单调增,
所以可以边修改边用lowerbound
阅读全文
0 0
- UVa1471 LIS变种 nlgn
- LIS(nlgn) DP
- uva10635(lcs lis O(NlgN))
- uva1471
- uva1471
- uva 10534 - Wavio Sequence(nlgn复杂度LIS)
- LIS O(nlgn)最简写法
- HDU1160 FatMouse's Speed LIS变种+路径
- 最长上升子序列LIS O(nlgn)算法
- zoj2136 最长上升子序列LIS O(NlgN)解法
- LIS (最长上升字序列) nlgn 解法
- PAT 1045. Favorite Color Stripe (30) 变种LCS或LIS
- DP21 LIS的变种问题-建桥问题 Variations of LIS-Building Bridge @geeksforgeeks
- LIS 最长上升子序列问题 nlgn时间打印其中一个序列
- 【hdu】4521 小明系列问题——小明序列【LIS变种】
- UVa1471 - Defense Lines
- uva1471 Defense Lines
- uva1471 二叉搜索树
- JS中的call和apply浅谈
- 栈结构
- js模拟Java类
- Myeclipse调试快捷键
- [HDU5414]CRB and String
- UVa1471 LIS变种 nlgn
- 数据库连接池
- POJ
- MVC学习:基础语法
- 《Flask Web开发》学习笔记之bug--(6)【TypeError: __init__() got an unexpected keyword argument 'method'】
- 软件工程项目之C/S学习
- ORACLE 日期函数 ADD_MONTHS
- 关于Java的时间问题
- android_来电广播