题目链接: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 波浪子序列的更多相关文章

  1. UVa 10534 波浪子序列(快速求LIS)

    https://vjudge.net/problem/UVA-10534 题意:给定一个长度为n的整数序列,求一个最长子序列(不一定连续),使得该序列的长度为2k+1,前k+1个数严格递增,后k+1个 ...

  2. LIS UVA 10534 Wavio Sequence

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

  3. UVA 10534 三 Wavio Sequence

    Wavio Sequence Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Sta ...

  4. uva 10534 Wavio Sequence LIS

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

  5. UVA 10534最长上升子序列运用

    在给定序列中寻找一个1~n+1递增,n~2n+1递减的序列,我的想法是直接对原序列和原序列的反序列用nlgn算法求递增序列,例如序列a[]={1,2,4,1,2,6},它的反序列为b[]={6,2,1 ...

  6. UVa 10534 Wavio Sequence (最长递增子序列 DP 二分)

    Wavio Sequence  Wavio is a sequence of integers. It has some interesting properties. ·  Wavio is of ...

  7. UVA 10534 Wavio Sequence

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=17&p ...

  8. uva 10534

    一开始WA了  参考了一下   求正反两个方向的最长上升子序列  并分别记录在两个数组中  最后求最大值 #include <iostream> #include <cstdio&g ...

  9. UVa 10534 Wavio Sequence (LIS+暴力)

    题意:给定一个序列,求一个最长子序列,使得序列长度为奇数,并且前一半严格递增,后一半严格递减. 析:先正向和逆向分别求一次LIS,然后再枚举中间的那个数,找得最长的那个序列. 代码如下: #pragm ...

随机推荐

  1. Promise个人笔记---【Promise的前世今生】

    Promise第一版本 案例是使用Node.js内置的fs模块[就是文件系统模块,负责读写文件.]来模拟异步操作 const fs = require('fs'); function getFileP ...

  2. 关于kernel的疑问,不解

    (1)最近看的关于linux的部分主要是底层部分,linux对设备是如何访问,结果还是通过地址.机制差不错知道,下一步是阅读相关代码进一步理清内核,同时了解驱动的开发. 主要的疑问是对于高端内存映射, ...

  3. TOJ 2711 Stars

    描述 Astronomers often examine star maps where stars are represented by points on a plane and each sta ...

  4. ArrayList集合长度的问题

    // 每次集合中实际包含的元素个数(count)超过了可包含元素的个数capcity  //的时候集合就会向内存中申请多开启一倍的空间,来保证集合长度够用 static void Main(strin ...

  5. artDialog组件应用学习(五)

    一.artDialog事件应用 对话框编写代码 function DialogEvent() { seajs.use(['jquery', '/Scripts/arale/artDialog/src/ ...

  6. 《Java开发实战经典》读书笔记

    Java常用的内存区域: (1)      栈内存空间:保存所有的对象名称. (2)      堆内存空间:保存每个对象的具体属性内容. (3)      全局数据区:保存static类型的属性. ( ...

  7. Nodejs中使用异步流程控制Async

    首先,我们都知道,Node基于事件驱动的异步I/O架构,所谓异步就是非阻塞,说白了就是一个事件执行了,我不必等待它执行完成后我才能执行下一个事件.所以在Node环境中的模块基本都是异步的,上一篇说到我 ...

  8. C/C++中的auto关键词

    C语言 auto被解释为一个自动存储变量的关键字,也就是申明一块临时的变量内存. 例如: auto double a=3.7; 表示a为一个自动存储的临时变量. C++语言 C++ 98标准/C++0 ...

  9. PAT 1037 Magic Coupon

    #include <cstdio> #include <cstdlib> #include <vector> #include <algorithm> ...

  10. webpack缓存

    缓存 缓存如何工作 1.当缓存客户端需要访问数据时,它首先检查缓存.当在缓存中找到所请求的数据时,它被称为缓存命中. 2.如果在缓存中找不到请求的数据 , 称为缓存未命中的情况,它将从主存储器中提取并 ...