[HAOI2007]上升序列(最长上升子序列)
题目描述
对于一个给定的 S=\{a_1,a_2,a_3,…,a_n\}S={a1,a2,a3,…,an} ,若有 P=\{a_{x_1},a_{x_2},a_{x_3},…,a_{x_m}\}P={ax1,ax2,ax3,…,axm} ,满足 (x_1<x_2<…<x_m)(x1<x2<…<xm)且 (a_{x_1}<a_{x_2}<…<a_{x_m})(ax1<ax2<…<axm) 。那么就称P为S的一个上升序列。如果有多个P满足条件,那么我们想求字典序最小的那个。
任务
给出 SS 序列,给出若干询问。对于第 ii 个询问,求出长度为 L_iLi 的上升序列,如有多个,求出字典序最小的那个(即首先 x_1x1 最小,如果不唯一,再看 x_2x2 最小……),如果不存在长度为 L_iLi 的上升序列,则打印Impossible.
输入输出格式
输入格式:
第一行一个 NN ,表示序列一共有 NN 个元素
第二行 NN 个数,为 a_1, a_2 , \cdots , a_na1,a2,⋯,an
第三行一个 MM ,表示询问次数。下面接 MM 行每行一个数 LL ,表示要询问长度为 LL 的上升序列。
输出格式:
对于每个询问,如果对应的序列存在,则输出,否则打印Impossible.
思路:
题意很简单,求字典序最小的长度为lis
但这道题要你输出求得的lis,所以我们要反着求lis(否则你会和我一开始一样一直wa)
我们的dp数组表示从这项开始,向后的最长上升子序列的长度
查询的时候,按从小到大遍历,满足上升就输出
代码(请无视注释,那是我一开始的代码):
#include<iostream>
#include<cstdio>
#define rii register int i
#define rij register int j
using namespace std;
int dp[],x[],pre[],maxn,ask,ans[],n,m;
int main()
{
scanf("%d",&n);
for(rii=;i<=n;i++)
{
scanf("%d",&x[i]);
dp[i]=;
}
scanf("%d",&m);
for(rii=n-;i>=;i--)
{
for(rij=i+;j<=n;j++)
{
if(x[j]>x[i])
{
if(dp[j]+>dp[i])
{
dp[i]=dp[j]+;
}
}
}
maxn=max(maxn,dp[i]);
// if(maxn>imax)imax=maxn;
}
// for(rii=2;i<=n;i++)
// {
// for(rij=1;j<=i-1;j++)
// {
// if(x[i]>x[j])
// {
// if(dp[i]<dp[j]+1)
// {
// dp[i]=dp[j]+1;
// pre[i]=j;
// }
// }
// }
// maxn=max(maxn,dp[i]);
// }
for(rii=;i<=m;i++)
{
scanf("%d",&ask);
if(ask>maxn)
{
puts("Impossible");
continue;
}
int wz=ask;
int pre=-;
for(rij=;j<=n;j++)
{
if(dp[j]>=wz&&x[j]>pre)
{
printf("%d ",x[j]);
pre=x[j];
wz--;
if(wz==)
{
break;
}
}
}
// for(rii=1;i<=n;i++)
// {
// if(dp[i]==ask)
// {
// wz=i;
// break;
// }
// }
// ans[ask]=x[wz];
// int ltt=ask;
// int kkk=pre[wz];
// while(ltt--)
// {
// ans[ltt]=x[kkk];
// kkk=pre[kkk];
// }
// for(rij=1;j<=ask;j++)
// {
// printf("%d ",ans[j]);
// }
puts("");
}
}
[HAOI2007]上升序列(最长上升子序列)的更多相关文章
- shuoj1936-D序列—最长上升子序列
Description 已知两个长度为N的数组A和B.下标从0标号至N-1. 如今定义一种D序列 (如果长度为L).这样的序列满足下列条件: 1. 0 <= D[i] <= N-1 2. ...
- 【模拟】CSU 1807 最长上升子序列~ (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1807 题目大意: 给你一个长度为N(N<=105)的数列,数列中的0可以被其他数 ...
- 【动态规划】【最长上升子序列】【贪心】bzoj1046 [HAOI2007]上升序列
nlogn求出最长上升子序列长度. 对每次询问,贪心地回答.设输入为x.当前数a[i]可能成为答案序列中的第k个,则若 f[i]>=x-k && a[i]>ans[k-1] ...
- 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
一, 最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...
- HDU-4521 小明系列问题——小明序列 间隔限制最长上升子序列
题意:给定一个长度为N的序列,现在要求给出一个最长的序列满足序列中的元素严格上升并且相邻两个数字的下标间隔要严格大于d. 分析: 1.线段树 由于给定的元素的取值范围为0-10^5,因此维护一棵线段树 ...
- 【LCS,LIS】最长公共子序列、单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- hunnu 11313 无重复元素序列的最长公共子序列转化成最长递增子序列 求法及证明
题目:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11313 湖师大的比赛,见我的另一篇水题题解,这里要说的 ...
- C语言 · 最长公共子序列 · 最长字符序列
算法提高篇有两个此类题目: 算法提高 最长字符序列 时间限制:1.0s 内存限制:256.0MB 最长字符序列 问题描述 设x(i), y(i), z(i)表示单个字符,则X={x( ...
- POJ - 2533 Longest Ordered Subsequence与HDU - 1257 最少拦截系统 DP+贪心(最长上升子序列及最少序列个数)(LIS)
Longest Ordered Subsequence A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let ...
随机推荐
- HashMap和Hashtable的比较
相同点 HashMap和Hashtable都是存储“键值对(key-value)”的散列表,而且都是采用拉链法解决hash冲突的.但是1.8中,hashmap引入了红黑树.Hashtable没有引入红 ...
- IO流之转换流
转换流 OutputStreamWriter类 查阅OutputStreamWriter的API介绍,OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流 ...
- VMware 安装提示缺少MicrosoftRuntime DLL 问题解决办法
VMware 安装提示缺少MicrosoftRuntime DLL 问题解决办法 刚刚安装VMware失败了试了好多办法,在这总结一下. 下面是程序的截图 这是报错信息 网上的解决方法: 当出现安装失 ...
- 什么是PDM?
PDM的含义 PDM的中文名称为产品数据管理(Product Data Management). PDM是一门用来管理所有与产品相关信息(包括零件信息.配置.文档.CAD文件.结构.权限信息等)和所有 ...
- TP5.0:引入view视图中公共的模版文件
1.实例:如后台admin模块,公用一个header.html和footer.hml 2.目录结构: 3.视图页面的使用方式: <!--添加header页面数据-->{include fi ...
- 建立virtualenv环境
建立virtualenv环境 virtualenv --no-site-packages yourenv 其中,yourenv是给环境起的名称 --no-site-packages表示安装的pytho ...
- Orchard Core 文档翻译 (四)CMS ModulesTitle (OrchardCore.Title)
Title (OrchardCore.Title) 标题模块提供Title Part ,允许用户定义内容项的标题.它还定义了ContentItemMetadata方面的DisplayText属性 Th ...
- June 03rd 2017 Week 22nd Saturday
Truth and roses have thorns about them. 真理和玫瑰,身边都有刺. Yesterday, I met with a young, beautiful profes ...
- Template Pattern & Strategy Pattern
详细见<C++设计模式 23种设计模式.pdf 55页> 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算 ...
- apache ab 测试 apr_socket_connect(): 由于目标机器积极拒绝 无法连接
遇到这种情况一般是你开的并行数量太多了...例如:ab -c 1000 -n 10000 http://localhost/index.html 如此大的请求就会挂掉,不过还是有补救措施的,可以通过增 ...