【bzoj1046】[HAOI2007]上升序列

2014年8月15日3,5483

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

6
3 4 1 2 3 6
3
6
4
5

Sample Output

Impossible
1 2 3 6
Impossible
数据范围
N<=10000
M<=1000

题解

首先求出以每个数为开头上升序列长度,即倒着做最长下降子序列

然后,把字典序尽量小的放前面

即若要求的序列长度为x,如果以第一个数(字典序最小的数)开头的最长上升子序列大等于x,则将它放在答案第一个,第二个数开头小于x,则舍弃,第三个大于x-1,放答案第二个,以此类推

是的就是这样子的,hzwblog写的不错。
代码也写了一些注释。
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7
 8 const int NN=100007;
 9
10 int n,m,cnt;
11 int a[NN],f[NN],best[NN];//f表示以i开头最长上升序列长度是多少,best是求解用的而已。
12
13 void solve(int x)
14 {
15     int last=0;
16     for(int i=1;i<=n;i++)
17         if(f[i]>=x&&a[i]>last)//满足即可,n复杂度求解最小字典序
18         {
19             printf("%d",a[i]);
20             if(x!=1) printf(" ");
21             last=a[i];
22             x--;
23             if(!x)break;
24         }
25     printf("\n");
26 }
27 int find(int x)
28 {
29     int l=1,r=cnt,ans=0;
30     while(l<=r)
31     {
32         int mid=(l+r)>>1;
33         if(best[mid]>x)ans=mid,l=mid+1;
34         else r=mid-1;
35     }
36     return ans;
37 }
38 void init()//首先求出以每个数为开头上升序列长度,即倒着做最长下降子序列
39 {
40     scanf("%d",&n);
41     for(int i=1;i<=n;i++)
42         scanf("%d",&a[i]);
43     for(int i=n;i;i--)
44     {
45         int t=find(a[i]);
46         f[i]=t+1;
47         cnt=max(cnt,t+1);
48         if(best[t+1]<a[i])
49             best[t+1]=a[i];
50     }
51 }
52 int main()
53 {
54     init();
55
56     scanf("%d",&m);
57     int x;
58     for(int i=1;i<=m;i++)
59     {
60         scanf("%d",&x);
61         if(x<=cnt) solve(x);
62         else puts("Impossible");
63     }
64 }

puts输出换行。

转载于:https://www.cnblogs.com/fengzhiyuan/p/7444515.html

bzoj1046 [HAOI2007]上升序列相关推荐

  1. bzoj1046[HAOI2007]上升序列

    1046[HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 5497  Solved: 1915 [Submit][Stat ...

  2. 2014.8.15模拟赛【公主的工作】bzoj1046[HAOI2007]上升序列

    bzoj题目是这样的 Description 对于一个给定的S={a1,a2,a3,-,an},若有P={ax1,ax2,ax3,-,axm},满足(x1 < x2 < - < xm ...

  3. bzoj1046(HAOI2007)上升序列

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1046 可贪心.关键是知道每个点最长能否>=x.所以先倒着做一个最长下降子序列就行了. ...

  4. Bzoj 1046: [HAOI2007]上升序列 二分,递推

    1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3671  Solved: 1255 [Submit][St ...

  5. BZOJ 1046: [HAOI2007]上升序列(LIS)

    题目挺坑的..但是不难.先反向做一次最长下降子序列.然后得到了d(i),以i为起点的最长上升子序列,接下来贪心,得到字典序最小. ----------------------------------- ...

  6. BZOJ 1046: [HAOI2007]上升序列【贪心+二分状态+dp+递归】

    1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4987  Solved: 1732 [Submit][St ...

  7. bzoj 1046: [HAOI2007]上升序列

    1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4860  Solved: 1692 [Submit][St ...

  8. [HAOI2007]上升序列

    题目:BZOJ1046.洛谷P2215.codevs1714. 题目大意:对于一个给定的S={a1,a2,a3,-,an},若有P={$a_{x1},a_{x2},a_{x3},-,a_{xm}$}, ...

  9. [BZOJ 1046] [HAOI2007] 上升序列 【DP】

    题目链接:BZOJ - 1046 题目分析 先倒着做最长下降子序列,求出 f[i],即以 i 为起点向后的最长上升子序列长度. 注意题目要求的是 xi 的字典序最小,不是数值! 如果输入的 l 大于最 ...

最新文章

  1. c1xx: fatal error C1356: 无法找到 mspdbcore.dll
  2. _ISD-SMG518L2CT-F 海康威视测温人脸安检门 温度精度±0.5℃ 人脸抓拍金属探测
  3. Windows2003如何安装IIS
  4. Hadoop入门(五)IO操作
  5. 【HDU - 5876】Sparse Graph(补图bfs,STLset)
  6. python程序设计与应用第1章
  7. MyEclipse中对项目分类管理
  8. 更靠谱的横竖屏检测方法
  9. Sync Framework 词汇表
  10. 安装python报错:Detected Windows 7 SP1 without KB2533623
  11. KAKASI - 将日文转换为平假名/片假名/罗马音
  12. mac mysql dmg_在mac下使用DMG安装Mysql
  13. 英语不规则动词变化表
  14. python如何写日志_python写日志
  15. 百度编辑器-Ueditor-上传图片的配置
  16. Codeforces469div2F curfew(贪心)
  17. 为河南小伙恩辉舍己救人点赞<原创>
  18. jijinghao-瞄准镜
  19. Python练习题——coffee
  20. 郑豪8.6非农数据提前布局,黄金是延续跌势还是多头反击?美盘操作建议

热门文章

  1. 什么是NSAssert?
  2. MATLAB建立图表的基础
  3. Entity Framework 4 in Action读书笔记——第四章:使用LINQ to Entities查询:预先加载和延迟加载...
  4. Windows7和Ubuntu9.10完美硬盘安装(2)
  5. CreatObject方法参数查询
  6. 使用IBM WID 建立SOA 之WID简介
  7. 的稳定性 linux_Linux系统KDE桌面,打造最接近Windows的界面环境!不用才后悔
  8. 蓝桥杯 ADV-239 算法提高 P0102
  9. 蓝桥杯 ALGO-150 算法训练 6-1 递归求二项式系数值
  10. python后端开发书籍_后端书籍推荐