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
5
3
2
4
2
4
Sample Output
2
3
5
3
5
4
首先有f[i]=max(a[j]+sqrt(|i-j|))-a[i]
先考虑j<i的情况,然后在考虑j>i的情况。
设j1<j2<i1<i2,j2转移i1比j1转移i1优,j1转移i2比j2转移i2优。
那么上下加一下再展开可以得出这是错的,所以满足决策单调性。
这个题比较良心卡出了我以前决策单调性代码的罢嗝。
就是每次队首的l需要++,否则计算后面的时候会用到Q[l].l,而此时Q[l].l可能已经转移过了。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 500050
typedef double f2;
struct A {
int l,r,p;
}Q[N];
int a[N],n;
f2 f[N];
f2 Y(int j,int i) {
return a[j]+sqrt(i>j?i-j:j-i);
}
int find1(const A &a,int x) {
int l=a.l,r=a.r+1;
while(l<r) {
int mid=(l+r)>>1;
if(Y(x,mid)<=Y(a.p,mid)) l=mid+1;
else r=mid;
}
return l;
}
int find2(const A &a,int x) {
int l=a.l,r=a.r+1;
while(l<r) {
int mid=(l+r)>>1;
if(Y(x,mid)>Y(a.p,mid)) l=mid+1;
else r=mid;
}
return l-1;
}
int main() {
scanf("%d",&n);
int i,l=0,r=0;
for(i=1;i<=n;i++) scanf("%d",&a[i]);
for(i=1;i<=n;i++) {
Q[l].l++;
while(l<r&&Q[l].l>Q[l].r) l++;
f[i]=max(0.0,Y(Q[l].p,i)-a[i]);
if(l==r||Y(i,n)>Y(Q[r-1].p,n)) {
while(l<r&&Y(i,Q[r-1].l)>Y(Q[r-1].p,Q[r-1].l)) r--;
if(l==r) Q[r++]=(A){i,n,i};
else {
int x=find1(Q[r-1],i);
Q[r-1].r=x-1; Q[r++]=(A){x,n,i};
}
}
}
l=r=0;
for(i=n;i>=1;i--) {
Q[l].r--;
while(l<r&&Q[l].l>Q[l].r) l++;
f[i]=max(f[i],Y(Q[l].p,i)-a[i]);
if(l==r||Y(i,1)>Y(Q[r-1].p,1)) {
while(l<r&&Y(i,Q[r-1].r)>Y(Q[r-1].p,Q[r-1].r)) r--;
if(l==r) Q[r++]=(A){1,i,i};
else {
int x=find2(Q[r-1],i);
Q[r-1].l=x+1; Q[r++]=(A){1,x,i};
}
}
}
for(i=1;i<=n;i++) {
printf("%d\n",(int)ceil(f[i]));
}
}
BZOJ_2216_[Poi2011]Lightning Conductor_决策单调性的更多相关文章
- 【BZOJ2216】[Poi2011]Lightning Conductor 决策单调性
[BZOJ2216][Poi2011]Lightning Conductor Description 已知一个长度为n的序列a1,a2,...,an.对于每个1<=i<=n,找到最小的非负 ...
- P3515 [POI2011]Lightning Conductor[决策单调性优化]
给定一序列,求对于每一个$a_i$的最小非负整数$p_i$,使得$\forall j \neq i $有$ p_i>=a_j-a_i+ \sqrt{|i-j|}$. 绝对值很烦 ,先分左右情况单 ...
- LOJ2074/2157 JSOI2016/POI2011 Lightning Conductor 决策单调性DP
传送门 我们相当于要求出\(f_i = \max\limits_{j=1}^{n} (a_j + \sqrt{|i-j|})\).这个绝对值太烦人了,考虑对于\(i>j\)和\(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(决策单调性分治)
P3515 [POI2011]Lightning Conductor 式子可转化为:$p>=a_j-a_i+sqrt(i-j) (j<i)$ $j>i$的情况,把上式翻转即可得到 下 ...
- 洛谷P3515 [POI2011]Lightning Conductor(动态规划,决策单调性,单调队列)
洛谷题目传送门 疯狂%%%几个月前就秒了此题的Tyher巨佬 借着这题总结一下决策单调性优化DP吧.蒟蒻觉得用数形结合的思想能够轻松地理解它. 首先,题目要我们求所有的\(p_i\),那么把式子变一下 ...
- bzoj 2216 [Poi2011]Lightning Conductor——单调队列+二分处理决策单调性
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2216 那个关于位置的代价是带根号的,所以随着距离的增加而增长变慢:所以靠后的位置一旦比靠前的 ...
- 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( ...
随机推荐
- VS中的 MD/MT设置 【转】
VS系列工具作为目前微软主打的集成开发环境,在历经了近20多年的发展后,到如今已经可以 说是Windows平台上各种IDE环境中的翘楚了.很多别的开发工具已经难望其项背了,如今VS2010也已经面市很 ...
- GDB调试动态链接库
http://cyukang.com/2012/06/25/gdb-with-libso.html http://cyukang.com/2011/05/06/valgrind.html
- 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...
- [Python-tools]defaultdict的使用场景
Python标准库中collections对集合类型的数据结构进行了非常多拓展操作.这些操作在我们使用集合的时候会带来非常多的便利.多看看非常有优点. defaultdict是当中一个方法,就是给字典 ...
- CSDN站点系统升级公告
各位尊敬的CSDN用户: 你们好. CSDN站点将于2015年12月17日23时-12月18日08时进行系统升级维护,升级维护期间,CSDN站点将会受到影响.可能会导致博客.下载频道及站点其它功能无法 ...
- 广告制胜无它,顺应人性尔——leo鉴书63
近期看了几本怎样写文案的书.对广告有了些兴趣.查了下相关销量排行,位置比較高的是本叫<科学的广告+我的广告生涯>的书,是同一作者(Claude C. Hopkins)两本书的合集.前者是他 ...
- c语言知识点总结-------静态区、堆、栈、常量区等
在C语言中地址占4个字节 1.编程语言发展 低级语言----->高级语言 机器语言 ---> 汇编---->高级语言(C语言.C++.JAVA等) 机器语言 :0101 0010 1 ...
- 【SSH2(理论篇)】--Struts2配置具体解释
上篇博客讨论了SSH2框架模型,在开发过程中发现SSH2的开发模型事实上类似于经典的三层模式,在每一层中分别加入了不同的框架,显示层使用的是Struts2进行配置的,业务逻辑层使用的是Spring配置 ...
- css实现轮播效果图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- VS + Qt5Designer + Anaconda环境配置
最近打算做一个模型训练工具,从来都不喜欢做UI的我,最终把目光放在了QtDesigner上.配环境的过程中在网上翻阅了不少博客,但大多是pycharm或者是VScode,使用VS的似乎不多.所以打算记 ...