【BZOJ】2216: [Poi2011]Lightning Conductor
题意
给一个长度为\(n\)的序列\(a_i\),对于每个\(1 \le i \le n\),找到最小的非负整数\(p\)满足 对于任意的\(j\), \(a_j \le a_i + p - \sqrt{|i-j|}\)
分析
我们正反dp一下。
题解
令\(d(i)\)表示最小的\(p\),则\(d(i) = max(a_j+\sqrt{i-j})-a_i, j < i\)。
其实发现这是有决策单调性的。即对于决策\(j\)和\(k(j > k)\),如果\(j\)在\(i\)时比\(k\)在\(i\)优了,则对于所有\(x > i\),决策\(j\)都比决策\(k\)优。所以我们用一个栈来维护一下最优区间即可,更新区间用二分,复杂度\(O(nlogn)\)。
#include <bits/stdc++.h>
using namespace std;
typedef double lf;
inline int getint() {
int x=0, c=getchar();
for(; c<48||c>57; c=getchar());
for(; c>47&&c<58; x=x*10+c-48, c=getchar());
return x;
}
const int N=500005;
struct ip {
int id, l, r;
}q[N];
int n, a[N];
inline lf cal(int j, int i) {
return a[j]-a[i]+sqrt(i-j);
}
void dp(lf *f) {
ip *fr=q, *ta=q;
*ta++=(ip){1, 2, n};
for(int i=2; i<=n; ++i) {
for(; fr+1!=ta && (fr+1)->l<=i; ++fr);
f[i]=cal(fr->id, i);
++fr->l;
for(; fr!=ta && fr->l>fr->r; ++fr);
for(; fr!=ta && cal((ta-1)->id, (ta-1)->l)<cal(i, (ta-1)->l); --ta);
if(fr!=ta) {
ip *b=ta-1;
int l=b->l, r=b->r;
while(l<=r) {
int mid=(l+r)>>1;
if(cal(b->id, mid)<cal(i, mid)) {
r=mid-1;
}
else {
l=mid+1;
}
}
++r;
if(r<=n) {
b->r=r-1;
*ta++=(ip){i, r, n};
}
}
else {
*ta++=(ip){i, i+1, n};
}
}
}
lf f[N], g[N];
int main() {
n=getint();
for(int i=1; i<=n; ++i) {
a[i]=getint();
}
dp(f);
reverse(a+1, a+1+n);
dp(g);
for(int i=1; i<=n; ++i) {
printf("%d\n", max(0, int(ceil(max(f[i], g[n-i+1])))));
}
return 0;
}
【BZOJ】2216: [Poi2011]Lightning Conductor的更多相关文章
- [bzoj 2216] [Poi2011] Lightning Conductor
[bzoj 2216] [Poi2011] Lightning Conductor Description 已知一个长度为n的序列a1,a2,-,an. 对于每个1<=i<=n,找到最小的 ...
- bzoj 2216: [Poi2011]Lightning Conductor【决策单调性dp+分治】
参考:https://blog.csdn.net/clove_unique/article/details/57405845 死活不过样例看了题解才发现要用double.... \[ a_j \leq ...
- bzoj 2216 [Poi2011]Lightning Conductor——单调队列+二分处理决策单调性
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2216 那个关于位置的代价是带根号的,所以随着距离的增加而增长变慢:所以靠后的位置一旦比靠前的 ...
- 【BZOJ】2277: [Poi2011]Strongbox
题意 有一个密码箱,\(0\)到\(n-1\)中的某些整数是它的密码.如果\(a\)和\(b\)都是它的密码,那么\((a+b)%n\)也是它的密码(\(a,b\)可以相等).某人试了\(k\)次密码 ...
- 【BZOJ】2212: [Poi2011]Tree Rotations
题意 给一棵\(n(1 \le n \le 200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. 分析 可以发现如果交换非叶结点的左右子树,对子树内的交换无影响, ...
- 【BZOJ2216】[Poi2011]Lightning Conductor 决策单调性
[BZOJ2216][Poi2011]Lightning Conductor Description 已知一个长度为n的序列a1,a2,...,an.对于每个1<=i<=n,找到最小的非负 ...
- 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法
整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
随机推荐
- 设计模式学习之桥接模式(Bridge,结构型模式)(15)
参考地址:http://terrylee.cnblogs.com/archive/2006/02/24/336652.html 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化, ...
- [webkit移动开发笔记]之如何去除android上a标签产生的边框(转)
转载地址:http://www.cnblogs.com/PeunZhang/archive/2013/02/28/2907708.html 去年年底,做完最后一个项目就可以开开心心回家,可是在测试阶段 ...
- 【翻译十七】java-并发之高性能对象
High Level Concurrency Objects So far, this lesson has focused on the low-level APIs that have been ...
- NPOI 通用导出数据到Excel 分类: C# Helper 2014-11-04 16:06 246人阅读 评论(0) 收藏
应用场景: 在项目中,经常遇到将数据库数据导出到Excel,针对这种情况做了个程序封装.工作原理:利用NPOI将SQL语句查询出的DataTable数据导出到Excel,所见即所得. 程序界面: ...
- 数据结构之图 Part3 – 2 遍历
BFS using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...
- wp8 入门到精通 启动系统分享照片任务
PhotoChooserTask photoChooserTask = new PhotoChooserTask(); photoChooserTask.Completed += photoChoos ...
- [Linux][VMWare] 学习笔记之安装Linux系统-网络配置
最近开始折腾Linux,在本机装了个VMWare和Centos,装完之后虚拟机里面的OS可以上网,但是使用SecureCRT连接不上虚拟机,开始折腾这个网络. vmware安装好以后,会自动添加两张网 ...
- STUN和TURN技术浅析
转自:http://blog.csdn.net/yu_xiang/article/details/9227023 在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分 ...
- Oracle资源
ORACLE 10g下载地址 oracle 下载还需要用户名我自己注册了个方便大家使用下载 user:1603869780@qq.compass:qwe123QWE现在直接点击不能下载了 要经过ora ...
- maven会报Could not transfer artifact xxx错误
需要在你的eclipse更新一下maven的包 如下: