奈芙莲的序列

Problem Description

有一天可爱的Nephren得到了一个序列,一开始,她取出序列的第一个数,形成一个新的序列B,然后取出序列A的第二个数,放在序列B的最左边或最右边,序列B此时有两个数,下一步,再取出序列A的第三个数放在序列B的最左边或最右边,……

现在的问题是,通过上面的步骤,可以得到B的最长上升子序列的长度是多少

Input

第一行,一个整数N.
第二行,N个整数,表示序列A。

Output

一行一个整数,表示最长上升子序列的长度

Sample Input

4
2 1 3 4

Sample Output

4

题解:

只考虑组成最长序列的那些数字,其他数字忽略。当最长的序列的第一个元素放入B序列后,剩下的数字要不比B小,靠左放;要不比B大,向右放;要不就不是最长序列的一部分。
将数组逆序,分别求出每个位置的LIS和最长下降子序列,设为dp1和dp2,结果为dp1i+dp2i−1dp1_i+dp2_i-1dp1i​+dp2i​−1的最大值。

#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<map>
#include<vector>
#include<queue>
#include<iterator>
#define dbg(x) cout<<#x<<" = "<<x<<endl;
#define INF 0x3f3f3f3f
#define eps 1e-7using namespace std;
typedef long long LL;
typedef pair<int, int> P;
const int maxn = 200100;
const int mod = 1000000007;
int a[maxn], dp1[maxn], dp2[maxn], g1[maxn], g2[maxn];int main()
{int n, i, j, k, pos;int top1 = 0, top2;scanf("%d", &n);for(i=1;i<=n;i++)scanf("%d", &a[i]);for(i=n;i>=1;i--){pos = lower_bound(g1, g1+top1, a[i])-g1;if(pos == top1)top1++;g1[pos] = a[i];dp1[i] = pos+1;}top2 = n;for(i=n;i>=1;i--){pos = upper_bound(g2+top2, g2+n, a[i])-g2;if(pos == top2)top2--;g2[pos-1] = a[i];dp2[i] = n-pos+1;}int ans = 1;for(i=1;i<=n;i++)ans = max(ans, dp1[i]+dp2[i]-1);printf("%d\n", ans);return 0;
}

51nod_2369 奈芙莲的序列(动态规划)相关推荐

  1. 51NOD 2370 奈芙莲的护符

    >>这是原题传送门<< 答案参考来自 http://www.cnblogs.com/sugewud/p/9822933.html 思路:看到取值范围之后,仅有的思路还是暴力?: ...

  2. 洛谷P2501数字序列 动态规划

    题目 题目链接 题解 这道题目我觉得是神题,非常有意思的题目,也挺难做的. 第一问:求最少需要改变的数量 这一问比较简单,之前也见过这种套路. 定义dp[i]dp[i]dp[i]表示aaa序列中a[1 ...

  3. 113. Leetcode 674. 最长连续递增序列 (动态规划-子序列问题)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i]:以下标i为结尾的数组的连续递增的子序列长度为dp[i]. 注意这里的定义,一定是以下标i为结尾,并不是说一定以下标0为起始位置. 步骤二.推断状 ...

  4. BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...

  5. NOIP2018提高组省一冲奖班模测训练(一)

    比赛链接 https://www.51nod.com/contest/problemList.html#!contestId=72&randomCode=147206 这次考试的题非常有质量 ...

  6. [51Nod]NOIP2018提高组省一冲奖班模测训练(一)题解

    http://www.51nod.com/contest/problemList.html#!contestId=72&randomCode=147206 原题水题大赛.. A.珂朵莉的旅行 ...

  7. 51Nod NOIP2018提高组省一冲奖班模测训练

    51Nod NOIP2018提高组省一冲奖班模测训练 NOIP2018提高组省一冲奖班模测训练1 T1 珂朵莉的旅行 T2 奈芙莲的序列 T3 奈芙莲的护符 NOIP2018提高组省一冲奖班模测训练2 ...

  8. 【学习笔记】线段树详解(全)

    [学习笔记]线段树详解(全) 和三个同学一起搞了接近两个月的线段树,头都要炸了T_T,趁心态尚未凉之前赶快把东西记下来... [目录] [基础]作者:\((Silent\)_\(EAG)\) [懒标记 ...

  9. noip模拟赛 Nephren Ruq Insania

    题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg 注意:本题大样例4的输出文件修改为 https://pan.baidu.com/s/1b ...

最新文章

  1. Java中程序初始化的顺序
  2. poj 3045 Cow Acrobats (贪心!!不是二分,)
  3. typora export to word is excellent
  4. atitit.加入win 系统服务 bat批处理程序服务的法总结instsrv srvany java linux
  5. dart与java互调_Dart与Java不同的地方
  6. Elasticsearch 6.x 下载安装
  7. idea 新建ssm java ee_IDEA搭建SSM项目实现增删改查
  8. 阿里晓斌:如何做好技术 Team Leader?
  9. SSM简单参数传递与获取方法
  10. 利用BioPerl将DNA序列翻译成蛋白序列
  11. BGP AS过滤列表
  12. 管理感悟:出了问题先怀疑自己
  13. RS-485接口协议详解
  14. 软件评测师--第12小时 兼容性测试
  15. 视觉里程计 特征点法
  16. 阿里云服务器买完不知道如何使用(新手入门教程)
  17. MAC怎样显示隐藏文件
  18. 性能常识 [踩坑总结] nf_conntrack: table full, dropping packet [新]
  19. WIN7使用手机蓝牙共享网络,及利用蓝牙及WLAN实现双网卡同时上内外网
  20. 数据分析岗位面试准备请看这篇!

热门文章

  1. 我的世界服务器淬炼系统,我的世界淬炼指令 | 手游网游页游攻略大全
  2. 【4】 脑部MRI图像肿瘤分类级别
  3. 拆掉思维里的墙读书笔记
  4. 爬虫,爬取猫眼电影Top100的电影名与评分
  5. Excel技能培训之六-定位功能,隔行插入删除空行,分组插入空行,高亮行列间差异,复制筛选后的数据
  6. iphone11拍照没有咔嚓声
  7. 精品软件 推荐 电子书转换器 EPUB to PDF Converter
  8. JAVA联机版五子棋——源码(一个类一个main暴力开发)
  9. TypeError: Person() takes no arguments
  10. A股明日风口:央行工作会议要求推进法定数字货币研发