[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 ...
随机推荐
- PAT 1025 PAT Ranking
#include <cstdio> #include <cstdlib> #include <vector> #include <cstring> #i ...
- 人工智能(AI)
一.人工智能的核心——机器学习 人工智能是一个很大的圈子,但人工智能的基础是机器学习. 机器学习是什么? 其实就是人告诉机器想做什么事情,并且给它一堆数据让它模仿着去做. 机器学习需要什么? 算法.数 ...
- for计算位置坐标
代码1效果图: 代码2效果图: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...
- javascript实现数据结构: 稀疏矩阵之三元组线性表表示
稀疏矩阵(Sparse Matrix):对于稀疏矩阵,目前还没有一个确切的定义.设矩阵A是一个n*m的矩阵中有s个非零元素,设 δ=s/(n*m),称δ为稀疏因子, 如果某一矩阵的稀疏因子δ满足δ≦ ...
- 04_Spring中使用Quartz
[Spring中使用SimplerTrigger] [QuartzTask.java] package com.higgin.task; import java.text.SimpleDateForm ...
- Python单元测试框架unittest使用方法讲解
这篇文章主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测试套件方法等内容,需要的朋友可以参考下 概 ...
- Linux中基于apache httpd的svn服务器搭建与配置
mod_dav_svn是apache连接svn的模块 yum install subversion mod_dav_svn httpd 配置文件简单说明, SVNParentPath 说明可以在指定的 ...
- Orchard Core 文档翻译 (三) Orchard Core Modules
原文连接:https://www.cnblogs.com/Qbit/p/9746442.html 转载请注明出处 介绍 Orchard Core Modules库提供了一种机制,可以拥有一个独立的模块 ...
- Jmeter入门11 使用Simple Controller组织接口测试用例
接口测试实践中,可以使用Simple Controller来组织测试用例. 官网上说该控制器的主要用途用来组织采样器和其他的逻辑控制器等. 以下为一个接口测试项目结构示例: 1 测试计划 >添加 ...
- IOS 本地推送(UILocalNotification)
推送通知 ● 注意:这里说的推送通知跟NSNotification有所区别 • NSNotification是抽象的,不可见的 • 推送通知是可见的(能用肉眼看到) ● iOS中提供了2种推送通知 ● ...