BZOJ


二维\(DP\)显然。尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目。
那么\(f[i]=\max\{f[j]\}+1\),其中\(j<i,\ a_j<a_i,\ j-a_j\leq i-a_i\)。就是三维偏序,可以\(CDQ\)。

这三个不等式很相似,再观察一下,发现由\(a_i>a_j,\ i-a_i\geq j-a_j\)就可以推出\(i>j\)。
所以只要满足两个条件就可以了,即二维偏序。
同时转移比较特殊,按\(i-a_i\)从小到大排序(第二关键字为\(a_i\)从小到大),求\(a_i\)的\(LIS\)即可。

注意其实还有个条件是\(j-a_j\geq 0\)。要判。


//2480kb    264ms
#include <cstdio>
#include <cctype>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 500000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=1e5+5;int A[N],id[N],sk[N];
char IN[MAXIN],*SS=IN,*TT=IN;inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-48,c=gc());return now;
}
inline bool cmp(int x,int y)
{return x-A[x]==y-A[y]?A[x]<A[y]:x-A[x]<y-A[y];
}
inline int Find(int x,int r)
{int l=1,mid;while(l<r)if(sk[mid=l+r>>1]<x) l=mid+1;else r=mid;return l;
}int main()
{const int n=read();for(int i=1; i<=n; ++i) A[i]=read(), id[i]=i;std::sort(id+1,id+1+n,cmp);int top=0; sk[0]=-1;for(int i=1,a=A[id[1]]; i<=n; a=A[id[++i]])if(id[i]-a>=0)//j-a[j]>=0!if(a>sk[top]) sk[++top]=a;else sk[Find(a,top)]=a;printf("%d\n",top);return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/10339797.html

BZOJ.1109.[POI2007]堆积木Klo(DP LIS)相关推荐

  1. bzoj 1109: [POI2007]堆积木Klo(二维偏序)

    1109: [POI2007]堆积木Klo Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1139  Solved: 423 [Submit][St ...

  2. BZOJ 1109: [POI2007]堆积木Klo 神分析, LIS, BIT, 二分

    Description Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的 所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的 ...

  3. BZOJ 1109 [POI2007]堆积木Klo(树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1109 [题目大意] Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体. ...

  4. [2019.3.17]BZOJ1109 [POI2007]堆积木Klo

    考虑暴力dp. 设\(dp_i\)表示前\(i\)个积木,保留积木\(i\)的最大答案. 那么有 \(dp_i=max(dp_j)+1(i>j,a_i>a_j,a_i-a_j\le i-j ...

  5. BZOJ1109: [POI2007]堆积木Klo

    一开始状态就定的不一样-一直想着优化转移然后越走越远.. %%%Seter 我们令f[i]表示第i个积木的积木回到自己的位置,前i个积木最多有多少个归位 枚举前一个归位的积木,可以得到 f[i]=f[ ...

  6. [POI2007]堆积木Klo

    题解: dp定义方程的时候 好像也不能都用前一个来递推..这样就不能优化了 这题看了题解才想出来... 还是很简单的啊.... 我们定义f[i]表示前i个最大收益 那么j要能从i转移就得满足a[i]- ...

  7. BZOJ 1233 干草堆 (单调队列优化DP)

    \(BZOJ~1233~~\)干草堆: (题目特殊性质) \(solution:\) 很妙的一道题目,开始看了一眼觉得是个傻逼贪心,从后往前当前层能多短就多短,尽量节省花费.但是这是DP专题,怎么会有 ...

  8. 51nod3174 堆积木

    3174 堆积木 有 n 种立方体积木,每种积木有无限多个,可以用 a,b,w 来描述,表示长.宽和高. 积木可以搭在一起成为一个塔形,积木 可以放在在积木  上当且仅当,积木 X 底面  可以嵌套进 ...

  9. 堆积木(基本数据结构-ArrayList数组的使用)

    蒜头君有 n 块积木,编号分别为 1 到 n.一开始,蒜头把第 i 块积木放在位置 i.蒜头君进行 m次操作,每次操作,蒜头把位置 b 上的积木整体移动到位置 a 上面. 比如 1 位置的积木是 1, ...

最新文章

  1. 跟着百度学PHP[14]-PDO-优化驱动
  2. python对象编程例子-python(十二)面向对象编程、类
  3. Apache通过配置.htaccess文件禁止访问.git、.svn等目录
  4. linux ps2键盘驱动,通用键盘鼠标模拟(包括USB和PS2)
  5. mysql集群搭建(使用docker 一主一从)
  6. lumen php命令,php – 如何使用命令行手动运行laravel / lumen作业
  7. 《结对-结对编程项目作业名称-结对项目总结》
  8. 图卷积网络进行骨骼识别代码_深兰科学院:动作识别——人体骨架时空图卷积网络的关节图构造方法简介...
  9. UIView动画设置
  10. thinkphp建站-前后台文件配置
  11. 流密码:lfsr(线性反馈移位寄存器)
  12. genymotion-安卓模拟器-IMEI修改方法
  13. css城市列表,js 获取全国城市列表方法
  14. 【学习目录】支持向量机原理网络资料整理
  15. JS 阻止键盘输入event.preventDefault 和window.event.returnValue
  16. 思科 计算机网络 测试
  17. 美通社企业新闻汇总 | 2019.1.3
  18. 计算机毕业设计(51)java小程序毕设作品之教室图书馆座位预约小程序系统
  19. inline内联函数 static静态函数 普通函数区别
  20. 微信读书怎么导入本地电子书

热门文章

  1. jenkins docker 安装_docker 安装 Jenkins
  2. python 装饰器实现缓存_Python, 这一个缓存装饰器, 其执行流程是怎样的?
  3. vue build text html,Vue中v-text / v-HTML使用实例代码详解_放手_前端开发者
  4. active server pages 错误 asp 0126_微信小程序全栈开发课程【视频版】2.1 小程序前端页面初始配置、ESlint格式错误...
  5. react native报错:Expected a component class,got[object object]
  6. java课程设计题目及代码中国象棋,写的太详细了
  7. python【蓝桥杯vip练习题库】ADV-309进制转换
  8. oracle SQL 命令行(三.增删改查)
  9. 计算机网络高分笔记视频,计算机网络高分笔记(整理).pdf
  10. linux 查看libevent 安装目录,linux下libevent安装配置与简介 以及 linux库文件搜索路径的配置...