【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. 海思NB-IOT的SDK函数使用说明

    1. 查询当前AT指令是否正在处理中 while(get_at_cmd_in_progress() == false); 2. 信号量发送函数 (, osNoWait); 3. 信号量接收函数 if( ...

  2. 【JUC源码解析】PriorityBlockingQueue

    简介 基于数据结构堆实现的线程安全的无界队列,这个堆的内存结构是数组,结合了数组和二叉树的特点. 堆 以下内容参考<编程珠玑>和<算法导论>有关堆的章节. 数据结构 堆是用来表 ...

  3. 原生与JS交互 iOS

      前言 Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间的app,兼具“Native App良好用户交互体验的优势”和“Web App跨平台开发的优势” ...

  4. ES6的新特性(20)—— Module 的加载实现

    Module 的加载实现 上一章介绍了模块的语法,本章介绍如何在浏览器和 Node 之中加载 ES6 模块,以及实际开发中经常遇到的一些问题(比如循环加载). 浏览器加载 传统方法 HTML 网页中, ...

  5. python爬虫调用搜索引擎及图片爬取实战

    实战三-向搜索引擎提交搜索请求 关键点:利用搜索引擎提供的接口 百度的接口:wd="要搜索的内容" 360的接口:q="要搜索的内容" 所以我们只要把我们提交给 ...

  6. 福大软工1816:Beta(3/7)

    Beta 冲刺 (3/7) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务 文字/口头描述 参与开发关键词提醒部分 展示GitHu ...

  7. C#的lock语句

    文章:lock 语句(C# 参考) 代码: using System; using System.Threading.Tasks; public class Account { private rea ...

  8. Alpha-8

    前言 失心疯病源8 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 今天完成了那些任务 20:00~23:00 代码整合,已形成可用模块,但还需适应场景局部优化 代码签入gith ...

  9. 上传web端——个人项目

    我用visual studio新建了一个web窗口,如图: 然后这里是系统自带的代码: [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile ...

  10. PAT 甲级 1035 Password

    https://pintia.cn/problem-sets/994805342720868352/problems/994805454989803520 To prepare for PAT, th ...