[bzoj 2216] [Poi2011] Lightning Conductor

Description

已知一个长度为n的序列a1,a2,…,an。

对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p – sqrt(abs(i-j))

Input

第一行n,(1<=n<=500000)

下面每行一个整数,其中第i行是ai。(0<=ai<=1000000000)

Output

n行,第i行表示对于i,得到的p

Sample Input

6
5
3
2
4
2
4

Sample Output

2
3
5
3
5
4

将不等式变一下形就可以得到这个:

\[P\ge { A }_{ j }+\sqrt { \left| i-j \right| } -{ A }_{ i }
\]

由于对任意的A都成立,那么就有:

\[P=max\{ { A }_{ j }+\sqrt { \left| i-j \right| } -{ A }_{ i }\}
\]

这个是满足决策单调性的,假设存在 $ j>k $ 且j比k更优,考虑到函数 $ f\left( x \right) =\sqrt { x } $ 为一个上凸函数,那么由于 $ i-k $ 于 $ i-j $ 的增长速度相同,而 \(i-k\) 更大,所以$ f\left( k \right) =\sqrt { i-k } $也就增长得越快(就是下跌得更猛).所以可以用决策单调性优化.(即k永世不得翻身).那么就可以二分决策的端点进行dp了.绝对值左右两遍dp一下就可以去掉了.

#include <cstdio>
#include <cmath>
#include <algorithm> using std :: max;
using std :: sqrt;
using std :: ceil; static const int maxm = 1e6 + 10; int f[maxm],g[maxm],A[maxm];
int n; void solve1(int l,int r,int L,int R){
if(l > r || L > R) return; int pos = 0,mid = (l + r) >> 1; double mx = 0; for(int i = L;i <= R && i <= mid;i++)
if((double) A[i] + sqrt(mid - i) >= mx)
pos = i,mx = (double) A[i] + sqrt(mid - i); f[mid] = A[pos] + ceil(sqrt(mid - pos)); solve1(l,mid - 1,L,pos);
solve1(mid + 1,r,pos,R);
} void solve2(int l,int r,int L,int R){
if(l > r || L > R) return; int pos = 0,mid = (l + r) >> 1; double mx = 0; for(int i = R;i >= L && i >= mid;i--)
if((double) A[i] + sqrt(i - mid) >= mx)
pos = i,mx = (double) A[i] + sqrt(i - mid); g[mid] = A[pos] + ceil(sqrt(pos - mid)); solve2(l,mid - 1,L,pos);
solve2(mid + 1,r,pos,R);
} int main(){
scanf("%d",&n);
for(int i = 1;i <= n;i++)scanf("%d",&A[i]); solve1(1,n,1,n);solve2(1,n,1,n); for(int i = 1;i <= n;i++)printf("%d\n",max(f[i],g[i])-A[i]); return 0;
}

传送门(权限题,非bzoj)

[bzoj 2216] [Poi2011] Lightning Conductor的更多相关文章

  1. bzoj 2216 [Poi2011]Lightning Conductor——单调队列+二分处理决策单调性

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2216 那个关于位置的代价是带根号的,所以随着距离的增加而增长变慢:所以靠后的位置一旦比靠前的 ...

  2. bzoj 2216: [Poi2011]Lightning Conductor【决策单调性dp+分治】

    参考:https://blog.csdn.net/clove_unique/article/details/57405845 死活不过样例看了题解才发现要用double.... \[ a_j \leq ...

  3. 【BZOJ】2216: [Poi2011]Lightning Conductor

    题意 给一个长度为\(n\)的序列\(a_i\),对于每个\(1 \le i \le n\),找到最小的非负整数\(p\)满足 对于任意的\(j\), \(a_j \le a_i + p - \sqr ...

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

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

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

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

  6. BZOJ2216 : [Poi2011]Lightning Conductor

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

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

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

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

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

  9. BZOJ2216 Poi2011 Lightning Conductor 【决策单调性优化DP】

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

随机推荐

  1. iOS-重构微博cell模型

    一.Frame模型: -------------------WeiboFrame.h-------------------------------------------------- ------- ...

  2. POJ:3259-Wormholes(最短路判断负环)

    Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 58153 Accepted: 21747 Descripti ...

  3. Git的使用--将本地项目上传到Github

    Git的使用--将本地项目上传到Github 感谢作者 --> 原文链接 很早之前就注册了Github,但对其使用一直懵懵懂懂,很不熟练.直到昨天做完百度前端技术学院的task,想把代码托管到G ...

  4. Java 的单元测试

    有点需要注意,当 JUnit 主线程退出,子线程也会跟着退出,需要使用子线程的 join() 方法使主线程等待 Maven 依赖 <dependency> <groupId>j ...

  5. 3,Python常用库之三:Matplotlib

    一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis水平和垂直的轴线 x轴和y轴刻度 tick刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y轴刻度 ...

  6. 4,版本控制git --忽略特殊文件

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ...,有强迫症的童鞋心里肯定 ...

  7. 关于Android SDK无法更新的解决办法

    最新摆弄PhoneGap打包,所以需要安卓的环境,配置后,sdk更新实在是在慢了,上网找了一下,可能被强了,所有总结如下办法,最后弄好了,跟大家分享一下 具体步骤:1:打开SDK Manager.ex ...

  8. Windows环境下svn服务器的安装步骤

    做为一个程序开发人员,就算自己一个人写程序,也应该有一个SVN版本控制系统,以便对开发代码进行有效的管理. 下载SVN服务器 下载地址是:http://subversion.apache.org/pa ...

  9. laravel5.5http会话机制

    1.配置文件 config/session.php 大多数是用file驱动,将session保存在storage/framework/sessions,可以考虑使用redis或者memcached 驱 ...

  10. JavaSE总结--面向对象

    封装: 1)为什么要用private修饰 保护属性或方法不被别人随意调用. 继承: 继承模型: 多态: 接口: 抽象类: 内部类: 在编译时用$分隔. 访问局部变量,该变量必须用final修饰. 向下 ...