BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
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)相关推荐
- bzoj 1109: [POI2007]堆积木Klo(二维偏序)
1109: [POI2007]堆积木Klo Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1139 Solved: 423 [Submit][St ...
- BZOJ 1109: [POI2007]堆积木Klo 神分析, LIS, BIT, 二分
Description Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的 所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的 ...
- BZOJ 1109 [POI2007]堆积木Klo(树状数组)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1109 [题目大意] Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体. ...
- [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 ...
- BZOJ1109: [POI2007]堆积木Klo
一开始状态就定的不一样-一直想着优化转移然后越走越远.. %%%Seter 我们令f[i]表示第i个积木的积木回到自己的位置,前i个积木最多有多少个归位 枚举前一个归位的积木,可以得到 f[i]=f[ ...
- [POI2007]堆积木Klo
题解: dp定义方程的时候 好像也不能都用前一个来递推..这样就不能优化了 这题看了题解才想出来... 还是很简单的啊.... 我们定义f[i]表示前i个最大收益 那么j要能从i转移就得满足a[i]- ...
- BZOJ 1233 干草堆 (单调队列优化DP)
\(BZOJ~1233~~\)干草堆: (题目特殊性质) \(solution:\) 很妙的一道题目,开始看了一眼觉得是个傻逼贪心,从后往前当前层能多短就多短,尽量节省花费.但是这是DP专题,怎么会有 ...
- 51nod3174 堆积木
3174 堆积木 有 n 种立方体积木,每种积木有无限多个,可以用 a,b,w 来描述,表示长.宽和高. 积木可以搭在一起成为一个塔形,积木 可以放在在积木 上当且仅当,积木 X 底面 可以嵌套进 ...
- 堆积木(基本数据结构-ArrayList数组的使用)
蒜头君有 n 块积木,编号分别为 1 到 n.一开始,蒜头把第 i 块积木放在位置 i.蒜头君进行 m次操作,每次操作,蒜头把位置 b 上的积木整体移动到位置 a 上面. 比如 1 位置的积木是 1, ...
最新文章
- 跟着百度学PHP[14]-PDO-优化驱动
- python对象编程例子-python(十二)面向对象编程、类
- Apache通过配置.htaccess文件禁止访问.git、.svn等目录
- linux ps2键盘驱动,通用键盘鼠标模拟(包括USB和PS2)
- mysql集群搭建(使用docker 一主一从)
- lumen php命令,php – 如何使用命令行手动运行laravel / lumen作业
- 《结对-结对编程项目作业名称-结对项目总结》
- 图卷积网络进行骨骼识别代码_深兰科学院:动作识别——人体骨架时空图卷积网络的关节图构造方法简介...
- UIView动画设置
- thinkphp建站-前后台文件配置
- 流密码:lfsr(线性反馈移位寄存器)
- genymotion-安卓模拟器-IMEI修改方法
- css城市列表,js 获取全国城市列表方法
- 【学习目录】支持向量机原理网络资料整理
- JS 阻止键盘输入event.preventDefault 和window.event.returnValue
- 思科 计算机网络 测试
- 美通社企业新闻汇总 | 2019.1.3
- 计算机毕业设计(51)java小程序毕设作品之教室图书馆座位预约小程序系统
- inline内联函数 static静态函数 普通函数区别
- 微信读书怎么导入本地电子书
热门文章
- jenkins docker 安装_docker 安装 Jenkins
- python 装饰器实现缓存_Python, 这一个缓存装饰器, 其执行流程是怎样的?
- vue build text html,Vue中v-text / v-HTML使用实例代码详解_放手_前端开发者
- active server pages 错误 asp 0126_微信小程序全栈开发课程【视频版】2.1 小程序前端页面初始配置、ESlint格式错误...
- react native报错:Expected a component class,got[object object]
- java课程设计题目及代码中国象棋,写的太详细了
- python【蓝桥杯vip练习题库】ADV-309进制转换
- oracle SQL 命令行(三.增删改查)
- 计算机网络高分笔记视频,计算机网络高分笔记(整理).pdf
- linux 查看libevent 安装目录,linux下libevent安装配置与简介 以及 linux库文件搜索路径的配置...