SHoj A序列
2024-09-05 20:36:05
A序列
发布时间: 2017年7月9日 18:17 最后更新: 2017年7月9日 21:05 时间限制: 1000ms 内存限制: 128M
描述
如果一个序列有奇数个正整数组成,不妨令此序列为a 1 ,a 2 ,a 3 ,...,a 2∗k+1 (0<=k ),并且a 1 ,a 2 ...a k+1 是一个严格递增的序列,a k+1 ,a k+2 ,...,a 2∗k+1 ,是一个严格递减的序列,则称此序列是A序列。
比如1 2 5 4 3就是一个A序列。
现在Jazz有一个长度为n 的数组,他希望让你求出这个数组所有满足A序列定义的子序列里面最大的那个长度。(子序列可以不连续)
比如1 2 5 4 3 6 7 8 9,最长的A序列子串是1 2 5 4 3。
输入
多组输入,每组两行。
第一行是n
,表示给的数组的长度。
第二行有n
个数(int范围),即给你的数组。
1<=n<=500000
。
输出
每组输入输出一行,即最长的A序列子串的长度。
样例输入1 复制
9
1 2 5 4 3 6 7 8 9
样例输出1
5 思路:我们遍历序列中每一个数字看看,对于每一个数字ai,以ai为中心,能得到的最长A序列是多少,这时先得到ai左边序列(以ai为序列末尾)的最长上升子序列left[i],再得到ai右边序列(包括ai)的最长下降子序列,最长下降子序列相当于序列倒着排的最长上升子序列,求得为right[i];
按A序列定义,ai的左右两边数字个数应该相等,那要使得ai为中心的A序列尽量大,可以去min(left[i],right[i])为A序列的长度的一半,2*min(left[i],right[i])-1即是以ai为中心A序列的最大长度,遍历ai,求最大长度。
AC代码:
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<string>
#include<stack>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
const int N_MAX = +;
vector<int>vec;
int dp[N_MAX];
int Right[N_MAX], Left[N_MAX];
int n;
void LIS(const vector<int>&vec,int *a) {
fill(dp,dp+n,INF);
for (int i = ; i < n;i++) {
*lower_bound(dp,dp+n,vec[i])=vec[i];
a[i] = lower_bound(dp, dp + n, INF) - dp;
}
}
int main() { while (scanf("%d",&n)!=EOF) {
vec.clear();
vec.resize(n);
for (int i = ; i < n;i++)
scanf("%d",&vec[i]);
int ans=;
LIS(vec,Left);
reverse(vec.begin(), vec.end());
LIS(vec, Right);
int res=;
for (int i = ; i < n;i++) {
int ans = min(Right[i], Left[n-i]);
res = max(res, ans);
}
printf("%d\n",*res-);
}
return ;
}
最新文章
- [LintCode] Longest Increasing Subsequence 最长递增子序列
- SQL 常用操作
- linux免交互登陆远程主机并执行命令(密钥对和Expect)
- 为 Docker Registry 增加 Nginx 前端
- json format validator
- 弹性布局-flex
- Xubuntu下Mentohust认证(校园网用户)
- sharepoint 2013 suitbar
- Qt Creator编译时:cannot open file &#39;debug\QtGuiEx.exe&#39; File not found
- linkin大话java
- 见过的最全的iOS面试题
- C++自己实现一个String类
- Python之words count
- 开关Windows休眠功能
- 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二)
- Windows虚拟内存不足问题的处理
- Docker Swarm——集群管理
- A8逻辑篇1.点亮一个LED(S5PV210.A8)
- react onclick传递参数
- sql where 1=1和 0=1 的作用(多条件查询错误的问题)