BZOJ 1046: [HAOI2007]上升序列 LIS -dp
1046: [HAOI2007]上升序列
Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 3438  Solved: 1171
[Submit][Status][Discuss]
Description
对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ax2 < … < axm)。那么就称P为S的一个上升序列。如果有多个P满足条件,那么我们想求字典序最小的那个。任务给出S序列,给出若干询问。对于第i个询问,求出长度为Li的上升序列,如有多个,求出字典序最小的那个(即首先x1最小,如果不唯一,再看x2最小……),如果不存在长度为Li的上升序列,则打印Impossible.
Input
第一行一个N,表示序列一共有N个元素第二行N个数,为a1,a2,…,an 第三行一个M,表示询问次数。下面接M行每行一个数L,表示要询问长度为L的上升序列。
Output
对于每个询问,如果对应的序列存在,则输出,否则打印Impossible.
Sample Input
3 4 1 2 3 6
3
6
4
5
Sample Output
1 2 3 6
Impossible
HINT
数据范围
N<=10000
M<=1000
Source
题解:
我们建立P[i] 表示 从i位置开始到n位置的最长上升子序列数
这个就是A数组反过来求一遍就好了
//meek///#include<bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <stack>
#include <sstream>
#include <vector>
using namespace std ;
#define mem(a) memset(a,0,sizeof(a))
#define pb push_back
#define fi first
#define se second
#define MP make_pair
typedef long long ll; const int N = ;
const int inf = ;
const int mod= ; int p[N],a[N],b[N],n,dp[N];
int main() {
scanf("%d",&n);
for(int i=;i<=n;i++) {
scanf("%d",&a[i]);
b[n-i+] = -a[i];
}
fill(dp+,dp+n+,inf);
for(int i=;i<=n;i++) {
int tmp=lower_bound(dp+,dp+n+,b[i])-dp;
p[n-i+] = tmp;
dp[tmp] = b[i];
}
//for(int i=1;i<=n;i++) cout<<p[i]<<" ";
int L = lower_bound(dp+,dp+n+,inf) - dp;
L--;
int m,x;
scanf("%d",&m);
while(m--) {
scanf("%d",&x);
if(x>L) {
cout<<"Impossible"<<endl;
continue;
}
int last=-;
for(int i=;i<=n;i++) {
if(p[i] >= x && a[i] > last) {
printf("%d",a[i]);last = a[i];
if(!(--x)) {
cout<<endl;
break;
}cout<<" ";
}
}
}
return ;
}
代码
BZOJ 1046: [HAOI2007]上升序列 LIS -dp的更多相关文章
- BZOJ 1046: [HAOI2007]上升序列(LIS)
		
题目挺坑的..但是不难.先反向做一次最长下降子序列.然后得到了d(i),以i为起点的最长上升子序列,接下来贪心,得到字典序最小. ----------------------------------- ...
 - [BZOJ 1046] [HAOI2007] 上升序列 【DP】
		
题目链接:BZOJ - 1046 题目分析 先倒着做最长下降子序列,求出 f[i],即以 i 为起点向后的最长上升子序列长度. 注意题目要求的是 xi 的字典序最小,不是数值! 如果输入的 l 大于最 ...
 - bzoj 1046: [HAOI2007]上升序列【dp+二分】
		
先从后到前做一个最长下降子序列的dp,记录f[i],我这里用的是二分(其实树状数组比较显然) 然后对于询问,超出最长上升子序列的直接输出:否则从前到后扫,f[i]>=x&&a[i ...
 - BZOJ 1046 [HAOI2007]上升序列(LIS + 贪心)
		
题意: m次询问,问下标最小字典序的长度为x的LIS是什么 n<=10000, m<=1000 思路: 先nlogn求出f[i]为以a[i]开头的LIS长度 然后贪心即可,复杂度nm 我们 ...
 - bzoj 1046 : [HAOI2007]上升序列   dp
		
题目链接 1046: [HAOI2007]上升序列 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3620 Solved: 1236[Submit] ...
 - BZOJ 1046: [HAOI2007]上升序列【贪心+二分状态+dp+递归】
		
1046: [HAOI2007]上升序列 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4987 Solved: 1732[Submit][Stat ...
 - Bzoj 1046: [HAOI2007]上升序列  二分,递推
		
1046: [HAOI2007]上升序列 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3671 Solved: 1255[Submit][Stat ...
 - 【BZOJ】1046: [HAOI2007]上升序列(dp)
		
http://www.lydsy.com/JudgeOnline/problem.php?id=1046 一直看错题....................... 这是要求位置的字典序啊QQQAAAQ ...
 - bzoj 1046: [HAOI2007]上升序列
		
Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ...
 
随机推荐
- 微软开放技术(中国)携 CKAN 和 OData 技术引入基于 Azure 的开放数据平台
			
今天,微软开放技术(中国)通过微软公有云Azure引入一个全新的开放数据平台,该平台基于开源数据门户解决方案 CKAN,以及由微软开放技术(中国)特别针对中国市场优化的ODATA插件来增强其国际化和本 ...
 - 调试mvc 源码【转:http://www.cnblogs.com/wucj/archive/2013/06/09/3128698.html】
			
最近在研究asp.net mvc的源码,于是在想,既然提供了源码,那我们如何进入源码调试了?在网上找了一些调试的方法,试了几个都不行,于是折腾了一上午,终于弄出来了,下面看看我的操作步骤. 一:准 ...
 - openssl AES加密以及padding
			
好习惯,先上代码再说事 加密 void AesEncrypt(unsigned char* pchIn, int nInLen, unsigned char *ciphertext, int & ...
 - lvs keepalived 安装配置详解
			
前段时间看了一篇文章,lvs做负载均衡根F5差不多,说实话不怎么相信,因为F5没玩过,也无法比较.F5相当的贵,真不是一般企业能负担的起的.负载均衡软件也用过不少,nginx,apache,hapro ...
 - iOS开发的22个奇谲巧技
			
结合自身的实践开发经验总结出了22个iOS开发的小技巧,以非常欢乐的语调轻松解决开发过程中所遇到的各种苦逼难题,光读着便已忍俊不禁. 1. TableView不显示没内容的Cell怎么办? 类似于图1 ...
 - iOS 进阶 第二十二天(0603)
			
0603 block\运行时 block block的本质是一个指向结构体的指针. 运行时 要分析clang命令反编译出来的c++代码,就要把一些小括号删掉来分析.因为这些小括号一般都是类型强转. o ...
 - 丢掉 WinPE,使用 DISKPART 来分区吧
			
自 Windows Vista 之后的操作系统,如果在安装系统的时候使用 Windows 自带的分区功能,则会多出一个 100M 的系统保留分区.这会让一个物理硬盘,原先最多可以分 4 个主分区的,现 ...
 - Travis-CI的进一步使用
			
今天主要对.travis.yml文件和makefile进行进一步的了解: 1.在.travis.yml文件中添加了给linux系统中安装了cppunit库的语句,使能够持续集成写过的单元测试的代码.主 ...
 - IE点击tif,tiff文件,提示打开而不是查找
			
IE点击tif或者tiff后缀的文件,提示窗口没有显示打开,而是现实查找.而下载到本地后,又能用acdsee之类的软件双击打开.在tif文件右键-属性中选择了打开程序,在IE中还是依然. 搜索网络资料 ...
 - 设置 Eclipse 智能代码提示,大幅度减少 alt+/ 使用频率,打每个字都出现代码提示的办法
			
以前网上有个英文版本的,现在自己汉化一下...O(∩_∩)O 哈哈 ~ http://www.cnblogs.com/lidabo/archive/2013/03/05/2944245.html ...