当前位置: 首页 > news >正文

【bzoj1046】[HAOI2007]上升序列

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

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

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

 

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8  
 9 typedef long long LL;
10  
11 #ifdef WIN32
12 #define orz "%lld"
13 #else
14 #define orz "%I64d"
15 #endif
16  
17 #define MAXN 10010
18 int f[MAXN],a[MAXN],b[MAXN];
19 int n,m;
20 int ans;
21 int x;
22  
23 void work(int x)
24 {
25     int res=0;
26     for (int i=1;i<=n;i++)
27         if (f[i]>=x && a[i]>res)
28         {
29             printf("%d",a[i]);
30             if (x!=1)
31                 printf(" ");
32             res=a[i];
33             x--;
34             if (!x)
35                 break;
36         }
37     printf("\n");
38 }
39  
40 int find(int x)
41 {
42     int l=1,r=ans,tmp=0;
43     while (l<=r)
44     {
45         int m=(l+r)>>1;
46         if (b[m]>x)
47             tmp=m,l=m+1;
48         else
49             r=m-1;
50     }
51     return tmp;
52 }
53  
54 void get()
55 {
56     for (int i=n;i;i--)
57     {
58         int t=find(a[i]);
59         f[i]=t+1;
60         ans=max(ans,t+1);
61         //b[t+1]=min(b[t+1],a[i]);
62         if(b[t+1]<a[i])
63             b[t+1]=a[i];
64     }
65 }
66  
67 int main()
68 {
69     scanf("%d",&n);
70     for (int i=1;i<=n;i++)
71         scanf("%d",&a[i]);
72     get();
73     scanf("%d",&m);
74     while (m--)
75     {
76         scanf("%d",&x);
77         if (x<=ans)
78             work(x);
79         else
80             printf("Impossible\n");
81     }   
82     return 0;
83 }

 

转载于:https://www.cnblogs.com/yangjiyuan/p/5343113.html

相关文章:

  • 关于网站优化
  • 全球78707个主要城市数据库,包含经纬度坐标值、国家、省份
  • java 二进制数字符串转换工具类
  • 逻辑数据库设计 - 单纯的树(递归关系数据)
  • web storage 之留言板
  • tablib.Dataset()操作exl类型数据之“类方法”研究
  • 用自己的机器人和ubuntu PC实现通信和控制--26
  • Ubuntu计算文件md5值命令
  • Maven Dependency Scope用法
  • 结对编写四则运算
  • Appium 一个测试套件多次启动android应用
  • zookeeper 配置
  • JAVA基础知识总结
  • 敌兵布阵_区间求和问题_线段树 or 树状数组
  • CI 笔记(1)
  • [数据结构]链表的实现在PHP中
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 07.Android之多媒体问题
  • java2019面试题北京
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • php面试题 汇集2
  • Python_网络编程
  • Rancher-k8s加速安装文档
  • select2 取值 遍历 设置默认值
  • TCP拥塞控制
  • 关于Flux,Vuex,Redux的思考
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 数据可视化之 Sankey 桑基图的实现
  • 项目实战-Api的解决方案
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 阿里云移动端播放器高级功能介绍
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #define用法
  • $ git push -u origin master 推送到远程库出错
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (附源码)php新闻发布平台 毕业设计 141646
  • (九十四)函数和二维数组
  • (力扣)1314.矩阵区域和
  • (十六)Flask之蓝图
  • (四)Android布局类型(线性布局LinearLayout)
  • (五)MySQL的备份及恢复
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • ***利用Ms05002溢出找“肉鸡
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net快速开发框架源码分享
  • .net中我喜欢的两种验证码