题目链接:BZOJ - 1046

题目分析

先倒着做最长下降子序列,求出 f[i],即以 i 为起点向后的最长上升子序列长度。

注意题目要求的是 xi 的字典序最小,不是数值!

如果输入的 l 大于最长上升子序列长度,输出 Impossible。

否则,从 1 向 n 枚举,贪心,如果 f[i] >= l,就选取 a[i],同时 --l,然后继续向后找比 a[i] 大的第一个数判断是否 f[i] >= l (这时l已经减小了1)。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm> using namespace std; const int MaxN = 10000 + 5; int n, m, l, MaxL;
int T[MaxN]; struct ES
{
int Num, Pos, w, v;
} E[MaxN]; inline bool CmpNum(ES e1, ES e2) {
if (e1.Num == e2.Num) return e1.Pos < e2.Pos;
return e1.Num < e2.Num;
}
inline bool CmpPos(ES e1, ES e2) {
return e1.Pos < e2.Pos;
} inline void Add(int x, int Num) {
for (int i = x; i <= n; i += i & -i)
T[i] = max(T[i], Num);
}
inline int Get(int x) {
if (x == 0) return 0;
int ret = 0;
for (int i = x; i; i -= i & -i)
ret = max(ret, T[i]);
return ret;
} int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d", &E[i].Num);
E[i].Pos = i;
}
sort(E + 1, E + n + 1, CmpNum);
int v_Index = 0;
for (int i = 1; i <= n; ++i) {
if (i == 1 || E[i].Num > E[i - 1].Num) ++v_Index;
E[i].v = v_Index;
}
sort(E + 1, E + n + 1, CmpPos);
MaxL = 0;
for (int i = n; i >= 1; --i) {
E[i].w = Get(n - (E[i].v + 1) + 1) + 1;
MaxL = max(MaxL, E[i].w);
Add(n - E[i].v + 1, E[i].w);
}
scanf("%d", &m);
for (int i = 1; i <= m; ++i) {
scanf("%d", &l);
if (l > MaxL) {
printf("Impossible\n");
continue;
}
int x = 0;
for (int j = 1; j <= n; ++j) {
if (E[j].v <= x) continue;
if (E[j].w >= l) {
x = E[j].v;
--l;
printf("%d", E[j].Num);
if (l > 0) printf(" ");
else break;
}
}
printf("\n");
}
return 0;
}

  

[BZOJ 1046] [HAOI2007] 上升序列 【DP】的更多相关文章

  1. bzoj 1046 : [HAOI2007]上升序列 dp

    题目链接 1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3620  Solved: 1236[Submit] ...

  2. BZOJ 1046: [HAOI2007]上升序列 LIS -dp

    1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3438  Solved: 1171[Submit][Stat ...

  3. BZOJ 1046: [HAOI2007]上升序列【贪心+二分状态+dp+递归】

    1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4987  Solved: 1732[Submit][Stat ...

  4. 1046: [HAOI2007]上升序列(dp)

    1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4999  Solved: 1738[Submit][Stat ...

  5. Bzoj 1046: [HAOI2007]上升序列 二分,递推

    1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3671  Solved: 1255[Submit][Stat ...

  6. BZOJ 1046: [HAOI2007]上升序列(LIS)

    题目挺坑的..但是不难.先反向做一次最长下降子序列.然后得到了d(i),以i为起点的最长上升子序列,接下来贪心,得到字典序最小. ----------------------------------- ...

  7. bzoj 1046: [HAOI2007]上升序列【dp+二分】

    先从后到前做一个最长下降子序列的dp,记录f[i],我这里用的是二分(其实树状数组比较显然) 然后对于询问,超出最长上升子序列的直接输出:否则从前到后扫,f[i]>=x&&a[i ...

  8. bzoj 1046: [HAOI2007]上升序列

    Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ...

  9. BZOJ 1046 [HAOI2007]上升序列(LIS + 贪心)

    题意: m次询问,问下标最小字典序的长度为x的LIS是什么 n<=10000, m<=1000 思路: 先nlogn求出f[i]为以a[i]开头的LIS长度 然后贪心即可,复杂度nm 我们 ...

随机推荐

  1. ServerVersion 引发了“System.InvalidOperationException”类型的异常

    遇到这样一个问题:添加互评信息,断点调试,跳转到BLL层后就直接跳到SqlHelper中弹出错误,说:未将对象设置引用到实例等.还请人帮忙调试代码,调试半天发现抽象工厂并没成功完成反射,奇怪的是:将出 ...

  2. 深入N皇后问题的两个最高效算法的详解 分类: C/C++ 2014-11-08 17:22 117人阅读 评论(0) 收藏

    N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行.同一列.同一斜线上的皇后都会自动攻击). 一. 求解N皇后问题是算法中回溯法应用的一个经典案例 回溯算 ...

  3. CodeIgniter框架url去index.php(转)

    针对apache,支持mode_rewrite可以通过在目录先建立.htaccess去掉url中index.php .htaccess内容如下: RewriteEngine on RewriteCon ...

  4. Android Activity横竖屏转换的生命周期

    新创建一个Activity,用来此次测试. 先贴代码 package com.hugo.apj.activitylifetest; import android.support.v7.app.AppC ...

  5. svs 在创建的时候 上传文件夹 bin obj 这些不要提交

    svs  在创建的时候 上传文件夹 bin  obj  这些不要提交  右键-去除版本控制并增加到忽略列表

  6. java simple check whether a file or directory.

    Ref:  check whether a file or directory First, make sure the path exists by using: new File(path).ex ...

  7. Oracle实用技巧

    一. ORACLE SQL PLUS 使用技巧: ----①查找重复记录: SELECT DRAWING, DSNOFROM EM5_PIPE_PREFABWHERE ROWID!= (SELECT ...

  8. phpstrom+xdebug调试PHP代码

    众所周知开发PHP的IDE种类繁多,然而开发PHP并不能像开发其他语言一样,调试PHP代码对诸多新手来说,搭建调试环境就比较麻烦!其实哈,我发现NuSphere-phped-16.0很强大,集成了很强 ...

  9. 为什么选择Typescript

    上一节,我简单介绍了Typescript,并将Typescript和JavaScript进行了对比,有些网友提出了一些疑问,可能有些网友对于这个Typescript还不是特别的熟悉,这节,我做一些演示 ...

  10. 受限玻尔兹曼机(RBM)

    能量模型 RBM用到了能量模型. 简单的概括一下能量模型.假设一个孤立系统(总能量$E$一定,粒子个数$N$一定),温度恒定为1,每个粒子有$m$个可能的状态,每个状态对应一个能量$e_i$.那么,在 ...