传送门

Description

数组A包含N个整数。设S为A的子序列且S中的元素是递增的,则S为A的递增子序列。如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS)。A的LIS可能有很多个。例如A为:1 3 2 0 4,1 3 4,1 2 4均为A的LIS。其中元素1和4一定会出现在LIS当中,元素2和3可能会出现在LIS当中,元素0一定不会出现在LIS当中。给出数组A,输出哪些数可能出现在LIS中,哪些数一定出现在LIS中。输出数字对应的下标,下标编号从1开始,编号为1 - N。例如:1 3 2 0 4,可能出现的元素为3和2,对应的下标为2和3。一定出现的元素为1和4,对应下标为1和5.

Input

第1行:1个数N,表示数组的长度。(1 <= N <= 50000)
第2 - N + 1行:每行1个数A[i],表示数组的元素(0 <= A[i] <= 10^9)

Output

第1行:可能出现在LIS中的数的下标,中间用空格分隔。(输出的下标按照递增排序)
第2行:一定会出现在LIS中的数的下标,中间用空格分隔。(输出的下标按照递增排序)

Sample Input

5
1
3
2
0
4

Sample Output

A:2 3
B:1 5

Solution

正的跑最长上升子序列,反的跑最长下降子序列
如果正反的dp值相加等于len+1(自己加了两次)说明可能在LIS中
若dp值独一无二且可能出现即为一定出现

Code

//By Menteur_Hxy
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define R(i,a,b) for(register int i=(b);i>=(a);i--)
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin)),p1==p2?EOF:*p1++)
using namespace std;char buf[1<<21],*p1,*p2;
inline int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}const int N=50010;
int n,len;
bool vis1[N],vis2[N];
int a[N],s[N],f[N],g[N];
vector<int> V[N];int main() {n=read();F(i,1,n) a[i]=read();F(i,1,n) {if(s[len]<a[i]) s[++len]=a[i],f[i]=len;else {int tmp=lower_bound(s+1,s+1+len,a[i])-s;s[tmp]=a[i];f[i]=tmp;}}len=0;R(i,1,n) {if(s[len]<-a[i]||!len) s[++len]=-a[i],g[i]=len;//无脑取负qwqelse {int tmp=lower_bound(s+1,s+1+len,-a[i])-s;s[tmp]=-a[i];g[i]=tmp;}}F(i,1,n) {if(f[i]+g[i]==len+1) vis1[i]=1;if(vis1[i]) V[f[i]].push_back(i);}F(i,1,n) {int siz=V[i].size();if(siz==1) vis2[V[i][0]]=1;}// F(i,1,n) cout<<f[i]<<" ";cout<<endl;// F(i,1,n) cout<<g[i]<<" ";cout<<endl;putchar('A');putchar(':'); F(i,1,n) if(vis1[i]&&!vis2[i]) printf("%d ",i);putchar('\n');putchar('B');putchar(':'); F(i,1,n) if(vis2[i]) printf("%d ",i);return 0;
}

转载于:https://www.cnblogs.com/Menteur-Hxy/p/9643281.html

[51Nod 1218] 最长递增子序列 V2 (LIS)相关推荐

  1. 最长递增子序列(LIS)

    最长递增子序列(LIS) 问题描述: 求一个序列的最长递增子序列,这样的子序列是允许中间越过一些字符的,即留"空". 例如:4 2 3 1 5 的最长递增子序列为 2 3 5,长度 ...

  2. 51Nod-1134 最长递增子序列【LIS】

    1134 最长递增子序列 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如 ...

  3. 动态规划 —— 最长递增子序列(LIS)

    LIS:Longest Increasing Subseq,最长递增子序列,是不要求该子序列在原始序列中间连续存放的. 为了降低对这一问题的理解难度,既然最长递增子序列不要求子序列位置连续,我们不妨先 ...

  4. CCNU ACM 2016夏季集训·最长递增子序列(LIS)

    这几天dp写得难受-- 在讨论这个问题之前,首先明确:"子序列"是指从原序列中挑选出若干元素,按照原序列中的顺序组成新的序列(区别于"子串",即从原序列中挑选连 ...

  5. 51nod 1376 最长递增子序列的数量(dp、CDQ分治 | BIT)

    题意: N≤5×104的序列,0≤Ai≤109,求LIS的数量N\le5\times10^4的序列, 0\le A_i\le 10^9, 求LIS的数量 分析: f[i]:以第i个数结尾的LIS的长度 ...

  6. 最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和...

    最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和 文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathi ...

  7. leetcode(300)—— Longest Increasing Subsequence(最长递增子序列)

    参考 Python 解法: 动态规划 -- 最长递增子序列(LIS) 原题位置:Longest Increasing Subsequence | LeetCode OJ 题目的说明: 严格递增: 子序 ...

  8. 最长公共子序列、最长连续公共子序列、最长递增子序列

    面试中除了排序问题,还会经常出现字符串的子序列问题,这里讲解使用动态规划解决三个常见的子序列问题: 1.最长公共子序列问题(LCS,longest-common-subsequence problem ...

  9. LIS 最长递增子序列问题

    一,    最长递增子序列问题的描述 设L=<a1,a2,-,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,-,akm>,其中k1< ...

最新文章

  1. spyder一打开就卡了_欧姆龙plc 用 SD 卡上传/下载程序
  2. Hello,Akka
  3. Kafka解惑之Old Producer(3)——Async Analysis
  4. 前端学习(3050):vue+element今日头条管理-表格组件基本使用
  5. 程序员:如何写出杀手级简历
  6. vs2017下开发C++MFC动态库实现
  7. LeetCode篇之栈:155(常数时间复杂度内找最小栈)
  8. C++算法之数据查找的代码
  9. C语言课程2——我们交流的工具:Coding.net
  10. Golang Gin实践 连载十六 在图片上绘制文字
  11. 居中为什么用transform,而不是margin top/left
  12. 发现一本好书--《Windows用户态程序高效排错 》
  13. 第1章思维导图图片版
  14. 超星网站服务器,云服务器 超星
  15. 金仓数据库 KingbaseES SQL 语言参考手册 (10. 查询和子查询)
  16. 视频超分修复,让重温经典影片有了新的可能
  17. 两个水壶相互倒水—水壶问题
  18. IGRP和EIGRP的无缝结合
  19. 科研用深度学习+有限元工作站的DIY装机配置(预算:5-6万)
  20. 网狐精华版搭建视频教程

热门文章

  1. 老笔记整理四:字符串的完美度
  2. 数据库去重查询问题详解
  3. 在WinCE中实现Screen Rotation(屏幕旋转)
  4. Mule,目前综合状态最良好的开源ESB方案引文
  5. jenkins svn tomcat ant自动部署
  6. React-Native-lesson
  7. 报错型sql注入原理分析
  8. (转) Spring读书笔记-----Spring的Bean之配置依赖
  9. 教程:在 VM Depot 中查找 Azure 可用的虚拟机镜像
  10. CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)...