[bzoj 2216] [Poi2011] Lightning Conductor
[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
将不等式变一下形就可以得到这个:
\]
由于对任意的A都成立,那么就有:
\]
这个是满足决策单调性的,假设存在 $ 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 2216] [Poi2011] Lightning Conductor的更多相关文章
- bzoj 2216 [Poi2011]Lightning Conductor——单调队列+二分处理决策单调性
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2216 那个关于位置的代价是带根号的,所以随着距离的增加而增长变慢:所以靠后的位置一旦比靠前的 ...
- bzoj 2216: [Poi2011]Lightning Conductor【决策单调性dp+分治】
参考:https://blog.csdn.net/clove_unique/article/details/57405845 死活不过样例看了题解才发现要用double.... \[ a_j \leq ...
- 【BZOJ】2216: [Poi2011]Lightning Conductor
题意 给一个长度为\(n\)的序列\(a_i\),对于每个\(1 \le i \le n\),找到最小的非负整数\(p\)满足 对于任意的\(j\), \(a_j \le a_i + p - \sqr ...
- 【BZOJ2216】[Poi2011]Lightning Conductor 决策单调性
[BZOJ2216][Poi2011]Lightning Conductor Description 已知一个长度为n的序列a1,a2,...,an.对于每个1<=i<=n,找到最小的非负 ...
- P3515 [POI2011]Lightning Conductor(决策单调性分治)
P3515 [POI2011]Lightning Conductor 式子可转化为:$p>=a_j-a_i+sqrt(i-j) (j<i)$ $j>i$的情况,把上式翻转即可得到 下 ...
- BZOJ2216 : [Poi2011]Lightning Conductor
$f[i]=\max(a[j]+\lceil\sqrt{|i-j|}\rceil)$, 拆开绝对值,考虑j<i,则决策具有单调性,j>i同理, 所以可以用分治$O(n\log n)$解决. ...
- 洛谷P3515 [POI2011]Lightning Conductor(动态规划,决策单调性,单调队列)
洛谷题目传送门 疯狂%%%几个月前就秒了此题的Tyher巨佬 借着这题总结一下决策单调性优化DP吧.蒟蒻觉得用数形结合的思想能够轻松地理解它. 首先,题目要我们求所有的\(p_i\),那么把式子变一下 ...
- BZOJ2216 [Poi2011]Lightning Conductor 【决策单调性dp】
题目链接 BZOJ2216 题解 学过高中数学都应知道,我们要求\(p\)的极值,参变分离为 \[h_j + sqrt{|i - j|} - h_i \le p\] 实际上就是求\(h_j + sqr ...
- BZOJ2216 Poi2011 Lightning Conductor 【决策单调性优化DP】
Description 已知一个长度为n的序列a1,a2,...,an. 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt( ...
随机推荐
- 以CentOS为操作系统的vps或服务器安装lnmp运行环境的方法
安装步骤: 1.使用putty或类似的SSH工具登陆VPS或服务器: 登陆后运行:screen -S lnmp 如果提示screen: command not found 命令不存在可以执行:yum ...
- 指定的参数已超出有效值的范围。 参数名: site
“/”应用程序中的服务器错误. 指定的参数已超出有效值的范围.参数名: site 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的 ...
- Android 中运行时权限获取联系人信息 Demo
代码比较简单... AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <m ...
- 二分查找问题(Java版)
二分查找问题(Java版) 1.一般实现 package search; /** * @author lei 2011-8-17 */ public class BinarySearch ...
- 超轻量级异步JS框架,别再让嵌套影响我们的优雅代码!
1.异步JS的重要性 随着Web平台地位的提升,霸占着浏览器的JavaScript语言也成为了世界上最流行的语言之一,甚至通过Node.js进入了服务器编程领域.JavaScript的一个重要特性便是 ...
- USACO Section2.1 The Castle 解题报告
castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- HTML简易学习笔记
文字版地址 https://github.com/songzhenhua/github/blob/master/HTML简易学习笔记.txt
- mac虚拟机上(centos系统)设置联网第二种方式
这种方式简单,不容易出错,用的桥接的方式. 这样的安装的centos会得到ip地址 然后编辑一下网卡配置,使其变为静态得ip 输入命令 # vi /etc/sysconfig/network-scri ...
- win10 64位 C# 连接oracle 32位, 遇到的问题及解决
首次 本机电脑是win10系统 64位的:安装的oracle数据库也是64位的: 服务器端的oracle 是32位的: 第一次安装的pl/sql 也是64位的, 配置完 F:\app\ln_qi\p ...
- springbootDay03 cookie和session 购物车技术
一.会话技术 1. 什么是会话 在计算机术语中,会话指的是客户端和服务器交互通讯的过程.简单的理解,大家可以看成是两个普通的人在打电话.一次电话从通话开始到挂断,可以看成是会话. 会话的特征 会话能够 ...