BZOJ1046: [HAOI2007]上升序列(洛谷P2215)
2018-03-01 09:20
387 查看
DP
BZOJ题目传送门洛谷题目传送门
首先预处理以ii为起点的LIS。
一看O(nm)O(nm)不会超,那么每次询问复杂度应该就是O(n)O(n)的了。
扫一遍过去,记下f[i]≥l−kf[i]≥l−k且a[i]>a[k]a[i]>a[k]的a[i]a[i],最后输出即可。
注意过滤行末空格。
代码:
#include<cstdio> #include<cstring> #include<algorithm> #define N 10005 #define M 1005 using namespace std; int n,m,sum,f ,a ,ans ; int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]),f[i]=1; for (int i=n;i;i--) for (int j=n;j>i;j--) if (a[j]>a[i]) f[i]=max(f[i],f[j]+1);//常数小(其实是我懒)所以就用O(n²)了 scanf("%d",&m); int l,x; while (m--){ scanf("%d",&l),sum=0; for (int i=0;i<=n&&l;i=x,l--){ for (x=i+1;x<=n;x++) if (f[x]>=l&&a[x]>a[i]) break; if (x>n) break; ans[++sum]=a[x]; } if (l) puts("Impossible"); else{ for (int i=1;i<sum;i++) printf("%d ",ans[i]); printf("%d\n",ans[sum]); } } return 0; }
相关文章推荐
- BZOJ 1046 洛谷 P2215 [HAOI2007] 上升序列
- BZOJ1046 洛谷 P2215 [HAOI2007]上升序列
- 【bzoj1046】 HAOI2007—上升序列
- 【bzoj1046】[HAOI2007]上升序列
- [BZOJ1046] [HAOI2007]上升序列
- BZOJ1046 [HAOI2007]上升序列 【LIS + 字典序最小】
- 【LIS】BZOJ1046(HAOI2007)[上升序列]题解
- BZOJ 1046 [HAOI2007]上升序列 动态规划+贪心
- BZOJ1046: [HAOI2007]上升序列
- BZOJ1046 [HAOI2007]上升序列 【LIS + 字典序最小】
- bzoj 1046 [HAOI2007] 上升序列 题解
- 洛谷P2215 [HAOI2007]上升序列
- 【BZOJ 1046】 [HAOI2007]上升序列
- BZOJ 1046: [HAOI2007]上升序列 暴力,二分
- [bzoj1046][HAOI2007]上升序列【dp】
- 【bzoj1046】 HAOI2007—上升序列
- [bzoj1046][HAOI2007]上升序列
- bzoj 1046: [HAOI2007]上升序列 解题报告
- bzoj1046[HAOI2007]上升序列
- 1046: [HAOI2007]上升序列 - BZOJ