$bzoj1046-HAOI2007$ 上升子序列 $dp$ 贪心
2024-04-25 00:29:55
- 题面描述
- 对于一个给定的\(S=\{a_1,a_2,a_3,…,a_n\}\),若有\(P=\{a_{x_1},a_{x_2},a_{x_3},…,a_{x_m}\}\),满足\((x_1 < x_2 < … < x_m)\)且\(( a_{x_1} < a_{x_2} < … < a_{x_m})\)。那么就称\(P\)为\(S\)的一个上升序列。如果有多个\(P\)满足条件,那么我们想求字典序最小的那个。任务给出S序列,给出若干询问。对于第\(i\)个询问,求出长度为\(L_i\)的上升序列,如有多个,求出字典序最小的那个(即首先\(x_1\)最小,如果不唯一,再看\(x_2\)最小……),如果不存在长度为\(L_i\)的上升序列,则打印
Impossible
.
- 对于一个给定的\(S=\{a_1,a_2,a_3,…,a_n\}\),若有\(P=\{a_{x_1},a_{x_2},a_{x_3},…,a_{x_m}\}\),满足\((x_1 < x_2 < … < x_m)\)且\(( a_{x_1} < a_{x_2} < … < a_{x_m})\)。那么就称\(P\)为\(S\)的一个上升序列。如果有多个\(P\)满足条件,那么我们想求字典序最小的那个。任务给出S序列,给出若干询问。对于第\(i\)个询问,求出长度为\(L_i\)的上升序列,如有多个,求出字典序最小的那个(即首先\(x_1\)最小,如果不唯一,再看\(x_2\)最小……),如果不存在长度为\(L_i\)的上升序列,则打印
- 输入格式
- 第一行一个\(N\),表示序列一共有\(N\)个元素第二行\(N\)个数,为\(a_1,a_2,…,a_n\) 第三行一个\(M\),表示询问次数。下面接\(M\)行每行一个数\(L\),表示要询问长度为L的上升序列。\(N\leq 10^4,M\leq 10^3\)
- 输出格式
- 对于每个询问,如果对应的序列存在,则输出,否则打印
Impossible
.
- 对于每个询问,如果对应的序列存在,则输出,否则打印
- 题解
- 不要被题面坑了,题面中的字典序不是指\(a_i\),而是指下标。
- 考虑反过来做最长下降子序列,获得每个点相后最长上升子序列长度。
- 每次询问,按字典序贪心,从前往后扫,可行就加入。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=1e4+5;
const int MAXM=1e3+5;
int n,m;
int a[MAXN],f[MAXN];
int b[MAXN],mxl;
int qry(int x){int l=1,r=n+1,mid;while (l+1<r){mid=(l+r)>>1;if (b[mid]>x) l=mid;else r=mid;}return l;
}
int main(){scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%d",&a[i]);f[n]=1; b[1]=a[n];for (int i=n-1;i>=1;i--){int len=qry(a[i]);f[i]=len+1;mxl=max(mxl,f[i]);if (b[len+1]<a[i]) b[len+1]=a[i];}scanf("%d",&m);for (int i=1;i<=m;i++){int l; scanf("%d",&l);if (l>mxl){printf("Impossible\n");continue;}else {int las=0;for (int j=1;j<=n&&l>0;j++){if (f[j]>=l&&a[j]>las){printf("%d ",a[j]);l--; las=a[j];}}printf("\n");}}return 0;
}
转载于:https://www.cnblogs.com/shjrd-dlb/p/10801051.html
最新文章
- Flutter 网络请求库http
- python不能创建新变量_Python之变量的创建过程!
- 马来西亚拟对打车软件巨头Grab罚款2000万美元
- 子串字谜substring anagrams
- Intellij IDEA中 Debug 用法
- hadoop的web ui的8088端口打不开一例
- python3多线程queue_Python多线程(3)——Queue模块
- linux cent os7,Cent OS 7系统目录结构
- python一年一度的校园好歌声_歌声满校园
- python与txt文件查找,在Python中搜索TXT文件
- 设计模式---简单工厂模式(c++实现)
- 使用Eclipse开发Java EE应用
- Django下载超时
- 华为机试6-质因数分解
- (已解决)微信小程序调查问卷所有题放在一个页面上
- 【数据结构】常见数据结构类型
- matplotlib animation 模拟弹簧的强迫振动 以及odeint函数的应用
- 人工膝关节的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 计算机作业评价表,【作业检查记录评语】_教导处作业检查评语,教导处作业检查记录...
- nLite工具集成驱动到windows安装光盘(操作简化版)
热门文章
- 求助:为什么我用360浏览器和UC浏览器打不开JAVA中的index.html文件? 一打开就显示浏览器首界页...
- 二叉搜索树(排序二叉树)
- (一〇二)静态库(.a)的打包
- 微软面试4、在二元树中找出和为某一值的所有路径
- ASP.NET版本不是1.1, 2.0的也一样
- 移动web开发之flex布局笔记
- 业界总结 | 如何改进双塔模型,才能更好的提升你的算法效果?
- 【实习招聘】创新工场首席科学家、原ACL主席、MSRA副院长周明老师领导的NLP团队招聘机器翻译方向实习生...
- 一分钟搞懂的算法之BPE算法
- 02 Nginx和Keepalived高可用