P3515 [POI2011]Lightning Conductor[决策单调性优化]
给定一序列,求对于每一个$a_i$的最小非负整数$p_i$,使得$\forall j \neq i $有$ p_i>=a_j-a_i+ \sqrt{|i-j|}$。
绝对值很烦 ,先分左右情况单独做。现在假设j都在i左边,则$ p_{i} = max \{ a_{j}-a_{i}+ \sqrt{i-j} \} = max \{ a_{j}+ \sqrt{i-j} \} - a_i$。带根号,不易斜率优化,考虑证决策单调性。
假设最优决策为j,j之前的任意决策称之为$j'$,只与$j$有关的项令之为$h[j]=a[j]$,则有
$h[j]+\sqrt{i-j} \geqslant h[j']+\sqrt{i-j'}$ ①
现要证$ h[j]+\sqrt{i-j+1} \geqslant h[j']+\sqrt{i-j'+1}$ ②
即证$ \sqrt{i-j+1}-\sqrt{i-j} \geqslant \sqrt{i-j'+1}-\sqrt{i-j'}$($②-①$得)
那么把它看成关于$j$的函数看单调性,设$g(j)=\sqrt{i-j+1}+\sqrt{i-j}$
对其求导。
$g'(j)=[(i-j+1)^{\frac{1}{2}}]' - [(i-j)^{\frac{1}{2}}]'=-\frac{1}{2} (i-j+1)^{-\frac{1}{2}} + \frac{1}{2} (i-j)^{-\frac{1}{2}}=\frac{1}{2} (\frac{1}{\sqrt{i-j}}-\frac{1}{\sqrt{i-j+1}})$
由$ i-j<i-j+1$知$\frac{1}{2} (\frac{1}{\sqrt{i-j}}-\frac{1}{\sqrt{i-j+1}}) > 0$则函数$g(j)$单调增,则上不等式成立,满足单调性。
证完决策单调性优化即可。
错误记录:第二次写的时候line37写成l<r了,,丢人。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
template<typename T>inline char MIN(T&A,T B){return A>B?A=B,:;}
template<typename T>inline char MAX(T&A,T B){return A<B?A=B,:;}
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int N=+;
struct kochiya_sanae{
int l,r,pos;
kochiya_sanae(int l0=,int r0=,int pos0=):l(l0),r(r0),pos(pos0){}
}q[N];
db sq[N],f[N],h[N];
int n,l,r;
inline void preprocess(){for(register int i=;i<=n;++i)sq[i]=sqrt((db)i);}
inline db calc(int j,int i){return (db)h[j]+sq[i-j];}
inline int find_pos(int L,int R,int j,int i){
++R;int mid;
while(L<R){
mid=L+R>>;
if(calc(j,mid)<=calc(i,mid))R=mid;
else L=mid+;
}
return R;
}
inline void dp(){
q[l=r=]=kochiya_sanae(,n,);
for(register int i=;i<=n;++i){
if(q[l].r<i)++l;else ++q[l].l;
MAX(f[i],calc(q[l].pos,i)-h[i]);
while(l<=r&&calc(q[r].pos,q[r].l)<=calc(i,q[r].l))--r;
if(r<l)q[r=l]=kochiya_sanae(i,n,i);
else{
int k;
if(calc(q[r].pos,q[r].r)>calc(i,q[r].r))k=q[r].r+;
else k=find_pos(q[r].l,q[r].r,q[r].pos,i);
if(k<=n)q[r].r=k-,q[++r]=kochiya_sanae(k,n,i);
}
}
} int main(){//freopen("tmp.in","r",stdin);freopen("tmp.out","w",stdout);
read(n);for(register int i=;i<=n;++i)read(h[i]);h[]=-;
preprocess();dp();reverse(h+,h+n+);reverse(f+,f+n+);dp();
for(register int i=n;i;--i)printf("%d\n",(int)ceil(f[i]));
return ;
}
P3515 [POI2011]Lightning Conductor[决策单调性优化]的更多相关文章
- 【BZOJ2216】[Poi2011]Lightning Conductor 决策单调性
[BZOJ2216][Poi2011]Lightning Conductor Description 已知一个长度为n的序列a1,a2,...,an.对于每个1<=i<=n,找到最小的非负 ...
- LOJ2074/2157 JSOI2016/POI2011 Lightning Conductor 决策单调性DP
传送门 我们相当于要求出\(f_i = \max\limits_{j=1}^{n} (a_j + \sqrt{|i-j|})\).这个绝对值太烦人了,考虑对于\(i>j\)和\(i<j\) ...
- P3515 [POI2011]Lightning Conductor(决策单调性分治)
P3515 [POI2011]Lightning Conductor 式子可转化为:$p>=a_j-a_i+sqrt(i-j) (j<i)$ $j>i$的情况,把上式翻转即可得到 下 ...
- BZOJ_2216_[Poi2011]Lightning Conductor_决策单调性
BZOJ_2216_[Poi2011]Lightning Conductor_决策单调性 Description 已知一个长度为n的序列a1,a2,...,an. 对于每个1<=i<=n, ...
- 洛谷P3515 [POI2011]Lightning Conductor(动态规划,决策单调性,单调队列)
洛谷题目传送门 疯狂%%%几个月前就秒了此题的Tyher巨佬 借着这题总结一下决策单调性优化DP吧.蒟蒻觉得用数形结合的思想能够轻松地理解它. 首先,题目要我们求所有的\(p_i\),那么把式子变一下 ...
- 洛谷P3515 [POI2011]Lightning Conductor(决策单调性)
题意 已知一个长度为n的序列a1,a2,...,an. 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt(abs(i-j)) ...
- 洛谷 P3515 [ POI 2011 ] Lightning Conductor —— 决策单调性DP
题目:https://www.luogu.org/problemnew/show/P3515 决策单调性... 参考TJ:https://www.cnblogs.com/CQzhangyu/p/725 ...
- P3515 [POI2011]Lightning Conductor
首先进行一步转化 $a_j \leq a_i + q - sqrt(abs(i - j))$ $a_i + q \geq a_j + sqrt(abs(i-j))$ 即 $q = max (a_j + ...
- 【bzoj2216】[Poi2011]Lightning Conductor 1D1D动态规划优化
Description 已知一个长度为n的序列a1,a2,…,an.对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p – sqrt(abs ...
随机推荐
- JavaScript读书笔记(6)-Function
Function类型 ECMAScript中函数是对象,每个函数都是Function类型的实例,也有属性和方法,函数是对象,函数名实际上市一个指向函数对象的指针,不会与某个函数绑定: function ...
- 【Python】IDLE启动错误
启动IDLE时报Subprocess Startup Error错误 错误信息 IDLE's subprocess didn't make connection.Either IDLE cant't ...
- 图像处理之log---log算子
在图像中,边缘可以看做是位于一阶导数较大的像素处,因此,我们可以求图像的一阶导数来确定图像的边缘,像sobel算子等一系列算子都是基于这个思想的. 但是这存在几个问题:1. 噪声的影响,在噪声点处一阶 ...
- Spring MVC获得HttpServletRequest
以下代码是获得Spring MVC中的HttpServletRequest ServletRequestAttributes attr = (ServletRequestAttributes) Req ...
- AOS应用基础平台-模块开发流程
AOS平台简单介绍 AOS应用基础平台基于JavaEE技术体系,以"标准功能可复用.通用模块可配置.行业需求高速开发.异构系统无缝集成"为目标.为软件开发团队提供高效可控.随需应变 ...
- MySQL 优化1
系统在应用时间很长的情况下会慢慢变得很慢,无论是人还是机器为了更好的工作和学习都需要适当学习.数据库也是一样的用久了, 自然就会产生空间碎片,需要我们都i数据库中的数据块进行维护和整理.下面以实例来说 ...
- Android 自定义View跑马灯效果(一)
今天通过书籍重新复习了一遍自定义VIew,为了加强自己的学习,我把它写在博客里面,有兴趣的可以看一下,相互学习共同进步: 通过自定义一个跑马灯效果,来诠释一下简单的效果: 一.创建一个类继承View, ...
- JS基础知识再整理..........不断更新中
1.JS的五种基本数据类型:字符串.数值.布尔.null.underfined. 2.在JS中,字符串.数值.布尔三种数据类型,有其属性和方法: 3.字符串的三种常用方法[.indexof()..su ...
- php部分:网页中报表的打印,并用CSS样式控制打印的部分;
网页中报表的打印,是通过调用window对象中的print()方法实现打印功能的: 调用浏览器本身的打印功能实现打印 <a href="#" onclick="wi ...
- [转]JS学习之正则表达式
js正则表达式实例 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证 •替换文本.可以在文档 ...