https://vjudge.net/problem/UVA-10534

题意:
给定一个长度为n的整数序列,求一个最长子序列(不一定连续),使得该序列的长度为2k+1,前k+1个数严格递增,后k+1个数严格递减。

思路:

先正着求一遍LIS,再反着求一遍LIS。

当然求法是得采用O(nlogn)的求法,这个网上有很多解释,我就不多介绍了。

最后的话枚举一遍就可以了,详见代码。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
using namespace std;
typedef long long LL;
typedef pair<int,int> pll;
const int INF=0x3f3f3f3f;
const int maxn=+; int n;
int a[maxn],r_a[maxn],g[maxn],d1[maxn],d2[maxn]; int main()
{
//freopen("D:\\input.txt","r",stdin);
while(~scanf("%d",&n))
{
for(int i=;i<n;i++)
{
scanf("%d",&a[i]);
r_a[n-i-]=a[i];
} int ans1=;
for(int i=;i<=n;i++) g[i]=INF;
for(int i=;i<n;i++)
{
int k=lower_bound(g+,g+n+,a[i])-g;
d1[i]=k; //记录了前i个数的最长子序列
g[k]=a[i];
ans1=max(ans1,d1[i]);
} int ans2=;
for(int i=;i<=n;i++) g[i]=INF;
for(int i=;i<n;i++)
{
int k=lower_bound(g+,g+n+,r_a[i])-g;
d2[i]=k;
g[k]=r_a[i];
ans2=max(ans2,d2[i]);
} //枚举递增和递减的分隔点
int ans=;
for(int i=;i<n;i++)
{
int temp=min(d1[i],d2[n-i-]);
temp=*(temp-)+;
if(ans<temp) ans=temp;
}
printf("%d\n",ans);
}
return ;
}

UVa 10534 波浪子序列(快速求LIS)的更多相关文章

  1. Uva 10534 波浪子序列

    题目链接:https://vjudge.net/contest/160916#problem/C 题意: 求一个奇数长的子序列,前一半严格递增,后一半严格递减:O(nlogn) 分析: 再次复习一下L ...

  2. UVA 10635 Prince and Princess—— 求LCS(最长公共子序列)转换成 求LIS(最长递增子序列)

    题目大意:有n*n个方格,王子有一条走法,依次经过m个格子,公主有一种走法,依次经过n个格子(不会重复走),问他们删去一些步数后,重叠步数的最大值. 显然是一个LCS,我一看到就高高兴兴的打了个板子上 ...

  3. LIS UVA 10534 Wavio Sequence

    题目传送门 题意:找对称的,形如:123454321 子序列的最长长度 分析:LIS的nlogn的做法,首先从前扫到尾,记录每个位置的最长上升子序列,从后扫到头同理.因为是对称的,所以取较小值*2-1 ...

  4. uva 10534 Wavio Sequence LIS

    // uva 10534 Wavio Sequence // // 能够将题目转化为经典的LIS. // 从左往右LIS记作d[i],从右往左LIS记作p[i]; // 则最后当中的min(d[i], ...

  5. Codeforces 486E LIS of Sequence --树状数组求LIS

    题意: 一个序列可能有多个最长子序列,现在问每个元素是以下三个种类的哪一类: 1.不属于任何一个最长子序列 2.属于其中某些但不是全部最长子序列 3.属于全部最长子序列 解法: 我们先求出dp1[i] ...

  6. UVA - 1471 Defense Lines (set/bit/lis)

    紫薯例题+1. 题意:给你一个长度为n(n<=200000)的序列a[n],求删除一个连续子序列后的可能的最长连续上升子序列的长度. 首先对序列进行分段,每一段连续的子序列的元素递增,设L[i] ...

  7. HDU1087(树状数组求LIS)

    题是水题,学习一下用树状数组求LIS. 先离散化一下,注意去重:然后就把a[i]作为下标,dp[i]作为值,max作为维护的运算插进树状数组即可. 如果是上升子序列,询问(a[i] - 1):如果是不 ...

  8. nlogn求LIS(树状数组)

    之前一直是用二分 但是因为比较难理解,写的时候也容易忘记怎么写. 今天比赛讲评的时候讲了一种用树状数组求LIS的方法 (1)好理解,自然也好写(但代码量比二分的大) (2)扩展性强.这个解法顺带求出以 ...

  9. 【模板】O(nlongn)求LIS

    合理运用单调性降低复杂度 平常用的都是O(n^2)的dp求LIS(最长不下降子序列)这里介绍O(nlogn)的算法 分析 对于可能出现的x<y<i且A[y]<A[x]<A[i] ...

随机推荐

  1. URL上的中文编码

    参考:http://www.chinaz.com/web/2013/0226/293639.shtml 一 URL上拼接中文会进行编码 在URL上拼接中文时,比如www.abc.com?season= ...

  2. AOP学习总结

    参考:什么是AOP? OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合.当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力.也就是说,OOP允许你定义从 ...

  3. 如何判断SharedPreferences 记录存在

    private EditText et; private String ettext; SharedPreferences settings; Editor editor; //设置 settings ...

  4. DG快照备库

    1.使用快照先决条件:主备库开启闪回功能 2.把备库转为快照库 DGMGRL> convert database satest to SNAPSHOT STANDBY; Converting d ...

  5. [Nginx] – 安全优化 – 配置文件优化

    1.配置Nginx gzip压缩实现性能优化 1.Nginx gzip压缩功能介绍  Nginx gzip压缩模块提供了压缩文件内容的功能,用户请求的内容在发送出用客户端之前,Nginx服务器会根据一 ...

  6. Just a Hook---hdu1698(线段树---区间处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 现有n个金属(编号1---n),每个金属的材质都是铜,有m个操作,每个操作都是把编号 L 到 R ...

  7. Python开发【模块】:BeautifulSoup

    BeautifulSoup BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XM ...

  8. H5上传压缩图片

    看这个,比较全的 https://github.com/mhbseal/html5ImgCompress ,几乎所有痛点都解决了! PC上传图片 基本结构 form[enctype="mul ...

  9. python-pdf添加水印

    0.用到两个扩展模块:ReportLab.PyPDF2. 1.创建水印PDF. 1).创建文字水印pdf文件 代码: #encoding=utf-8 #author: walker #date: 20 ...

  10. HTML---初识HTML

    版权声明:本文为博主原创文章.不经博主同意注明链接就可以转载. https://blog.csdn.net/Senior_lee/article/details/33723573          H ...