【BZOJ2216】Lightning Conductor(动态规划)

题面

BZOJ,然而是权限题

洛谷

题解

\(\sqrt {|i-j|}\)似乎没什么意义,只需要从前往后做一次再从后往前做一次就好了。

只考虑从前往后,把给定的式子移项,可以得到

\(p\ge a[j]-a[i]+\sqrt{i-j}\)

而\(a[i]\)是当前的枚举的位置\(i\)的值,这个是不会变化的。

所以要求的就是\(max(a[j]-\sqrt{i-j})\)

画出\(\sqrt x\)的函数图像,是一个增长率越来越慢的函数。

那么,如果当前转移\(i\)的时候,\(j\)优于\(k\)(\(k\lt j\)),

那么接下来转移\(i+1\)的时候同样\(j\)更优。

既然具有了决策单调性,直接二分就好了。

维护一个单调队列,存下当前位置\(j\)转移到哪些区间是更优的,

不难发现这个区间一定是\([l,n]\),当然也可能是个空区间。

插入的时候也二分修改一下就好了。有点类似于诗人小G那题。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define RG register
#define MAX 500500
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
struct Node{int i,l,r;}Q[MAX];
int h,t;
int n,a[MAX];
double f[MAX];
double Trans(int j,int i){return a[j]+sqrt(i-j);}
void Work()
{
Q[h=t=1]=(Node){1,2,n};
for(int i=2;i<=n;++i)
{
while(h<=t&&Q[h].r<i)++h;Q[h].l=i;
f[i]=max(f[i],Trans(Q[h].i,i)-a[i]);
while(h<=t&&Trans(Q[t].i,Q[t].l)<Trans(i,Q[t].l))--t;
if(h>t){Q[++t]=(Node){i,i,n};continue;}
int l=Q[t].l,r=Q[t].r,ret=Q[t].r+1;
while(l<=r)
{
int mid=(l+r)>>1;
if(Trans(Q[t].i,mid)<Trans(i,mid))ret=mid,r=mid-1;
else l=mid+1;
}
if(ret!=Q[t].l)Q[t].r=ret-1;else --t;
if(ret<=n)Q[++t]=(Node){i,ret,n};
}
}
int main()
{
n=read();
for(int i=1;i<=n;++i)a[i]=read();
Work();reverse(&a[1],&a[n+1]);reverse(&f[1],&f[n+1]);
Work();reverse(&f[1],&f[n+1]);
for(int i=1;i<=n;++i)printf("%d\n",(int)(ceil(f[i])));
return 0;
}

【BZOJ2216】Lightning Conductor(动态规划)的更多相关文章

  1. [BZOJ2216]Lightning Conductor

    原来决策单调性指的是这个东西... 一些DP可以写成$f_i=\max\limits_{j\lt i}g(i,j)$,设$p_i(p_i<j)$表示使得$g(i,j)$最大的$j$,如果$p_1 ...

  2. 【BZOJ2216】[Poi2011]Lightning Conductor 决策单调性

    [BZOJ2216][Poi2011]Lightning Conductor Description 已知一个长度为n的序列a1,a2,...,an.对于每个1<=i<=n,找到最小的非负 ...

  3. [bzoj 2216] [Poi2011] Lightning Conductor

    [bzoj 2216] [Poi2011] Lightning Conductor Description 已知一个长度为n的序列a1,a2,-,an. 对于每个1<=i<=n,找到最小的 ...

  4. P3515 [POI2011]Lightning Conductor(决策单调性分治)

    P3515 [POI2011]Lightning Conductor 式子可转化为:$p>=a_j-a_i+sqrt(i-j) (j<i)$ $j>i$的情况,把上式翻转即可得到 下 ...

  5. 【bzoj2216】[Poi2011]Lightning Conductor 1D1D动态规划优化

    Description 已知一个长度为n的序列a1,a2,…,an.对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p – sqrt(abs ...

  6. BZOJ2216 [Poi2011]Lightning Conductor 【决策单调性dp】

    题目链接 BZOJ2216 题解 学过高中数学都应知道,我们要求\(p\)的极值,参变分离为 \[h_j + sqrt{|i - j|} - h_i \le p\] 实际上就是求\(h_j + sqr ...

  7. BZOJ2216 : [Poi2011]Lightning Conductor

    $f[i]=\max(a[j]+\lceil\sqrt{|i-j|}\rceil)$, 拆开绝对值,考虑j<i,则决策具有单调性,j>i同理, 所以可以用分治$O(n\log n)$解决. ...

  8. 洛谷P3515 [POI2011]Lightning Conductor(动态规划,决策单调性,单调队列)

    洛谷题目传送门 疯狂%%%几个月前就秒了此题的Tyher巨佬 借着这题总结一下决策单调性优化DP吧.蒟蒻觉得用数形结合的思想能够轻松地理解它. 首先,题目要我们求所有的\(p_i\),那么把式子变一下 ...

  9. bzoj 2216 Lightning Conductor - 二分法 - 动态规划

    题目传送门 需要root权限的传送门 题目大意 给定一个长度为$n$的数组,要求对每个$1 \leqslant i \leqslant n$找到最小整数的$p$,对于任意$j$满足使得$a_{i} + ...

随机推荐

  1. [cogs347]地震

    COGS:地震(平衡树) COGS上一道题...文件名是equake 还是又打了一遍板子... 加个lazy标记就行了... 注意查询时先下传标记(lazy) // It is made by XZZ ...

  2. info信息的获取

    一.绝对路径(_SERVER[“SCRIPT_FILENAME”])这个是最常用,也是最有效的一个办法,找到phpinfo()页面可以直接找到网站的绝对路径,对于写shell和信息搜集是必不可少的.二 ...

  3. Qt-QML-电子罗盘

    使用QML中的Canvas实现电子罗盘绘制,效果图如下 一个简单的电子罗盘,红色N极.其中中间飞机表示当前的指向, 还是比较简单的,直接上代码吧 /* 作者:张建伟 时间:2018年4月27日 简述: ...

  4. Java泛型理解

    Java泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型.当需要使用某一种算法时,又无法具体算法的数据类型,或者想指定类型值的上限或下限,那么这时就需要Java泛型来大显身手 ...

  5. mnist手写数字识别(Logistic回归)

    import numpy as np from sklearn.neural_network import MLPClassifier from sklearn.linear_model import ...

  6. socket编程为什么需要htonl(), ntohl(), ntohs(),htons() 函数-------转载

    在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数. 网络字节顺序与本地字节顺序之间的转 ...

  7. day06 再谈编码 and 作业讲解

    1. 小数据池,(其他语言又叫常量池) id() 查看变量的内存地址 is和== is 判断内存地址是否一致 == 判断内容是否一致 小数据池的作用: 为了快速的创建字符串对象, 可以减少内存的浪费 ...

  8. Scrum立会报告+燃尽图(Beta阶段第二周第六次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2414 项目地址:https://coding.net/u/wuyy694 ...

  9. 王者荣耀交流协会第四次Scrum立会

    会议时间:2017年10月23号   18:00-18:28,时长28分钟. 会议地点:二食堂一楼第四个档口对着的靠路边的桌子. 立会内容: 1.小组成员汇报今日工作: 2.关于折线图与饼状图生成问题 ...

  10. alpha冲刺(事后诸葛亮)

    [设想和目标] Q1:我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? "小葵日记"是为了解决18-30岁年轻用户在记录生活时希望得到一美体验友好 ...