bzoj1046上升序列 DP+记录路径
来源:互联网 发布:淘宝到货多久确认收货 编辑:程序博客网 时间:2024/06/06 09:44
反向dp f[i]表示从n到i的最长不上升序列长度 打印的时候直接扫一遍就可以了。
#include <cstdio>#include <iostream>#include <cstring>#include <cmath>using namespace std;#define maxn 11000int a[maxn],n,cnt,p,len,x,b[maxn],f[maxn],maxl,m;inline int getpos(int k,int l,int r){ if(l==r) return l; int mid=(l+r)>>1; if(b[mid]<=k) return getpos(k,l,mid); else return getpos(k,mid+1,r);}inline void print(int len,int sta){ for (int i=sta+1;i<=n;i++) if (f[i]>=len&&a[i]>a[sta]) { if (len==1) { printf("%d\n",a[i]); return; } else printf("%d ",a[i]); print(len-1,i); break; }}int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]); b[1]=a[n]; cnt=1; f[n]=1; for(int i=n-1;i>=1;i--) { int pos=getpos(a[i],1,cnt+1); b[pos]=a[i]; if(pos>cnt) cnt=pos; if(cnt>maxl) maxl=cnt; f[i]=pos; } scanf("%d",&m); for (int i=1;i<=m;i++) { scanf("%d",&x); if (x>maxl) printf("Impossible\n"); else print(x,0); } return 0;}
0 0
- bzoj1046上升序列 DP+记录路径
- [BZOJ1046][HAOI2007]上升序列(dp+贪心)
- bzoj1046[HAOI2007]上升序列 DP(经典模型)
- BZOJ1046:上升序列(LIS & dp)
- bzoj1046: [HAOI2007]上升序列
- [BZOJ1046][HAOI2007]上升序列
- [BZOJ1046] [HAOI2007]上升序列
- BZOJ1046/HAOI2007上升序列
- 【BZOJ1046】 [HAOI2007]上升序列
- BZOJ1046: [HAOI2007]上升序列
- bzoj1046: [HAOI2007]上升序列
- BZOJ1046: [HAOI2007]上升序列
- bzoj1046 [HAOI2007]上升序列
- bzoj1046: [HAOI2007]上升序列
- 【bzoj1046】 HAOI2007—上升序列
- BZOJ1046 上升序列 [二分][贪心]
- hdu 1160 dp (二维最长上升子序列 记录路径
- BZOJ1046 洛谷 P2215 [HAOI2007]上升序列
- 暑期学习计划
- python 的repr和str以及“”
- 山东分公司的风格岁的法国方法
- Megacity
- 仿酷狗音乐播放器开发日志八——播放列表的实现三
- bzoj1046上升序列 DP+记录路径
- libevent 事件通知
- (一)u-boot2013.01.01 for s5pv210:《Uboot简介》
- Ajax 异步处理 servlet 交互
- 开篇
- hdoj 1161 Eddy's mistakes
- hdu 2043 密码
- 协程的用法
- 仿酷狗音乐播放器开发日志九——播放列表的实现四