博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LightOJ 1277 Looking for a Subsequence(LIS)
阅读量:6256 次
发布时间:2019-06-22

本文共 1253 字,大约阅读时间需要 4 分钟。

题目链接:

题意:给出一个长度为n的数列。输出数列一个长度恰好为m的下标字典序最小的(即最靠左的)上升子列。

思路:从右向左求一次最长递减子列,记录每个位置的f值,即以该数结尾最长的下降子列。对于给定的m,先从左向右找到一个f[i]>=m的位置,那么这个数肯定是答案的第一个,输出它,然后向右找一个大于这个数且f[j]>=m-1的数输出,依依次类推。。。

 

#include 
#include
using namespace std; const int MAX=100005; int C,num=0; int n,Q,m,f[MAX],cNum,c[MAX],a[MAX]; void DP() { int i,mid,low,high; cNum=0;c[++cNum]=a[1];f[1]=1; for(i=2;i<=n;i++) { low=1;high=cNum+1; while(low
>1; if(a[i]
=1;i--) if(f[i]>=m) { printf("%d",a[i]); m--; pre=a[i]; break; } while(m) { while(a[--i]>pre&&f[i]>=m) { printf(" %d",a[i]); m--; pre=a[i]; break; } } puts(""); } int main() { for(scanf("%d",&C);C--;) { scanf("%d%d",&n,&Q); int i; for(i=1;i<=n;i++) scanf("%d",&a[n+1-i]); DP(); printf("Case %d:\n",++num); while(Q--) { scanf("%d",&m); if(m>cNum) { puts("Impossible"); continue; } deal(); } } return 0; }

 

  

 

 

转载地址:http://xzxsa.baihongyu.com/

你可能感兴趣的文章
下载文件downloadFile
查看>>
cf-Round542-Div2-B(贪心)
查看>>
日志挖掘(logminer)
查看>>
LaTeX技巧005:定制自己炫酷的章节样式实例
查看>>
1_NAT模式和桥接模式下的网络配置
查看>>
EF架构~为EF DbContext生成的实体添加注释(T5模板应用)
查看>>
【转】VLAN原理详解
查看>>
python --- json模块和pickle模块详解
查看>>
idea中artifacts、facets、modules是什么意思?
查看>>
FUCKED-BUG之临时对象的生死
查看>>
SP2 PRIME1 - Prime Generator
查看>>
创建和编辑 crontab 文件
查看>>
钉钉发消息
查看>>
20172309_《程序设计与数据结构(下)》_课堂测试修改报告。
查看>>
(二十九)方法调用之解析
查看>>
Springboot文件上传与下载
查看>>
Activity与Fragment数据传递之Fragment从Activity获取数据 分类: ...
查看>>
记一次小的51CTO聚会
查看>>
架構設計_案例說明_by 高老師
查看>>
VR內容開發(PAGE-2)
查看>>