Uva 10534 波浪子序列
题目链接:https://vjudge.net/contest/160916#problem/C
题意:
求一个奇数长的子序列,前一半严格递增,后一半严格递减;O(nlogn)
分析:
再次复习一下LIS算法;
严格递增:
g[k] : d[]值为 k 的最小元素,由于是严格递增,也就是说二分下界low_bound;
最长不下降:
也就是说upper_bound;
解析:二分函数,返回值是[L,R),也就是说不下降的时候,就是在后面插入一个;
#include <bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f;
const int maxn = + ;
int a[maxn];
int b[maxn];
int d[maxn];
int p[maxn]; int g[maxn]; int main()
{
int n;
while(scanf("%d",&n)!=EOF) {
for(int i=;i<n;i++) {
scanf("%d",&a[i]);
//b[n-i-1] = a[i];
}
//memset(d,0,sizeof(d));
//memset(p,0,sizeof(p));
//d[0] = 1;
//for(int i=1;i<n;i++)
//{
// for(int j=0;j<i;j++)
// if(a[i]>a[j])
// d[i] = max(d[i],d[j]+1);
//} memset(g,inf,sizeof(g));
for(int i=;i<n;i++) {
int k = lower_bound(g+,g+n+,a[i])-g;
d[i] = k;
g[k] = a[i];
} //for(int i=n-2;i>=0;i--) {
// for(int j=n-1;j>i;j--) {
// if(a[i]>a[j])
// p[i] = max(p[i],p[j]+1);
// }
//}
memset(g,inf,sizeof(g));
for(int i=n-;i>=;i--) {
int k = lower_bound(g+,g+n+,a[i])-g;
p[i] = k;
g[k] = a[i];
} int ans = ;
for(int i=;i<n;i++)
if(d[i]!=&&p[i]!=)
ans = max(ans,*min(d[i],p[i])-);
printf("%d\n",ans); } return ;
}
Uva 10534 波浪子序列的更多相关文章
- UVa 10534 波浪子序列(快速求LIS)
https://vjudge.net/problem/UVA-10534 题意:给定一个长度为n的整数序列,求一个最长子序列(不一定连续),使得该序列的长度为2k+1,前k+1个数严格递增,后k+1个 ...
- LIS UVA 10534 Wavio Sequence
题目传送门 题意:找对称的,形如:123454321 子序列的最长长度 分析:LIS的nlogn的做法,首先从前扫到尾,记录每个位置的最长上升子序列,从后扫到头同理.因为是对称的,所以取较小值*2-1 ...
- UVA 10534 三 Wavio Sequence
Wavio Sequence Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Sta ...
- uva 10534 Wavio Sequence LIS
// uva 10534 Wavio Sequence // // 能够将题目转化为经典的LIS. // 从左往右LIS记作d[i],从右往左LIS记作p[i]; // 则最后当中的min(d[i], ...
- UVA 10534最长上升子序列运用
在给定序列中寻找一个1~n+1递增,n~2n+1递减的序列,我的想法是直接对原序列和原序列的反序列用nlgn算法求递增序列,例如序列a[]={1,2,4,1,2,6},它的反序列为b[]={6,2,1 ...
- UVa 10534 Wavio Sequence (最长递增子序列 DP 二分)
Wavio Sequence Wavio is a sequence of integers. It has some interesting properties. · Wavio is of ...
- UVA 10534 Wavio Sequence
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=17&p ...
- uva 10534
一开始WA了 参考了一下 求正反两个方向的最长上升子序列 并分别记录在两个数组中 最后求最大值 #include <iostream> #include <cstdio&g ...
- UVa 10534 Wavio Sequence (LIS+暴力)
题意:给定一个序列,求一个最长子序列,使得序列长度为奇数,并且前一半严格递增,后一半严格递减. 析:先正向和逆向分别求一次LIS,然后再枚举中间的那个数,找得最长的那个序列. 代码如下: #pragm ...
随机推荐
- Python 用栈判断括号匹配
#!/usr/bin/python # -*- coding: UTF-8 -*- from pythonds.basic.stack import Stack def parChecker(symb ...
- Linux快捷指令
Linux创建一个快捷指令,直接跳转到某个目录中的某个文件 创建快捷指令命令: $ ln -s 源目录 目标快捷方式 删除快捷指令命令: $ unlink 快捷方式名 eg:比如我想在 /usr 目录 ...
- 自动化交互expect
自动化交互expect 一,介绍 每次服务器控制链接都需要输入密码,很麻烦,每次交互大大延长了时间 因此就有了免交互及自动化交互存在expect 二,安装 yum install expect -y ...
- C. Molly's Chemicals
题目链接:http://codeforces.com/problemset/problem/776/C C. Molly's Chemicals time limit per test 2.5 sec ...
- (转)Unity 之 UGUI 小总结
转自:http://www.jianshu.com/p/5b6f5022662e 开发过程中对UGUI的一个小总结. 首先从原画师拿到效果图,美术切图,拿到碎图后打成大图. 我们先来说一下图:RGBA ...
- 1.1 js基础
2.代码从上往下,从左往右执行. 函数声明在哪里不重要,重要的是在哪里调用. undefined 未定义 3.数据类型 12,5 number 'abc' 字 ...
- java泛型中的各种限制
java和其他语言一样,都支持泛型,包括泛型类和泛型方法,但是java的泛型比较特殊.因为java的泛型并不是在java诞生之初就加入的,在很长的一段时间里,java是没有泛型的,在需要泛型的地方,统 ...
- js中判断对象是否存在
s中判断对象是否存在,写法有很多种: 第一种:if (!myObj) { var myObj = { }; }第二种:var global = this; if (!global.myObj) { ...
- node.js获取cookie
node.js 获取cookie var Cookies ={}; if (req.headers.cookie != null) { req.headers.cookie.split(';').fo ...
- python学习(五)--打印错误信息
from urllib import request #打印错误信息 except Exceptionlist = [ "http://www.baidu11.com/", &qu ...