洛谷 P3515 [ POI 2011 ] Lightning Conductor —— 决策单调性DP
题目:https://www.luogu.org/problemnew/show/P3515
决策单调性...
参考TJ:https://www.cnblogs.com/CQzhangyu/p/7258256.html
注释WA???最近似乎总是WA在二分上...
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int const maxn=5e5+;
int n,a[maxn],ans[maxn],h,t;
struct N{
double p,l,r;
N(int p=,int l=,int r=):p(p),l(l),r(r) {}
}q[maxn];
double calc(int i,int j){return a[i]+sqrt(abs(j-i))-a[j];}//i对j的答案
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=,h=,t=;i<=n;i++)
{
while(h<=t&&q[h].r<i)h++;
if(h<=t)q[h].l=i,ans[i]=max(ans[i],(int)ceil(calc(q[h].p,i)));
if(h>t||calc(i,n)>calc(q[t].p,n))
{
while(h<=t&&calc(i,q[t].l)>calc(q[t].p,q[t].l))t--;
if(h<=t)
{
// int l=q[t].l,r=q[t].r,ret;
// while(l<=r)
// {
// int mid=((l+r)>>1);
// if(calc(i,mid)>=calc(q[t].p,mid))ret=mid,r=mid-1;
// else l=mid+1;
// }
// q[t].l=ret-1; q[++t]=N(i,ret,n);
int l=q[t].l,r=q[t].r+;
while(l<r)
{
int mid=((l+r)>>);
if(calc(i,mid)<calc(q[t].p,mid))l=mid+;
else r=mid;
}
q[t].r=l-; q[++t]=N(i,l,n);
}
else q[++t]=N(i,i+,n);
}
}
for(int i=n,h=,t=;i;i--)
{
while(h<=t&&q[h].l>i)h++;
if(h<=t)q[h].r=i,ans[i]=max(ans[i],(int)ceil(calc(q[h].p,i)));
if(h>t||calc(i,)>calc(q[t].p,))//
{
while(h<=t&&calc(i,q[t].r)>calc(q[t].p,q[t].r))t--;
if(h<=t)
{
// int l=q[t].l,r=q[t].r,ret;
// while(l<=r)
// {
// int mid=((l+r)>>1);
// if(calc(i,mid)>calc(q[t].p,mid))ret=mid,r=mid-1;
// else l=mid+1;
// }
// q[t].l=ret+1; q[++t]=N(i,1,ret);
int l=q[t].l,r=q[t].r;
while(l<r)
{
int mid=((l+r)>>);
if(calc(i,mid)<calc(q[t].p,mid))r=mid;
else l=mid+;
}
q[t].l=r; q[++t]=N(i,,r-);
}
else q[++t]=N(i,,i-);
}
}
for(int i=;i<=n;i++)printf("%d\n",ans[i]);
return ;
}
洛谷 P3515 [ POI 2011 ] Lightning Conductor —— 决策单调性DP的更多相关文章
- LOJ2074/2157 JSOI2016/POI2011 Lightning Conductor 决策单调性DP
传送门 我们相当于要求出\(f_i = \max\limits_{j=1}^{n} (a_j + \sqrt{|i-j|})\).这个绝对值太烦人了,考虑对于\(i>j\)和\(i<j\) ...
- 【洛谷3515】[POI2011] Lightning Conductor(决策单调性)
点此看题面 大致题意: 给你一个序列,对于每个\(i\)求最小的自然数\(p\)使得对于任意\(j\)满足\(a_j\le a_i+p-\sqrt{|i-j|}\). 证明单调性 考虑到\(\sqrt ...
- P3515 [POI2011]Lightning Conductor[决策单调性优化]
给定一序列,求对于每一个$a_i$的最小非负整数$p_i$,使得$\forall j \neq i $有$ p_i>=a_j-a_i+ \sqrt{|i-j|}$. 绝对值很烦 ,先分左右情况单 ...
- 【BZOJ2216】[Poi2011]Lightning Conductor 决策单调性
[BZOJ2216][Poi2011]Lightning Conductor Description 已知一个长度为n的序列a1,a2,...,an.对于每个1<=i<=n,找到最小的非负 ...
- 洛谷P1973 [NOI2011]Noi嘉年华(决策单调性)
传送门 鉴于FlashHu大佬讲的这么好(而且我根本不会)我就不再讲一遍了->传送 //minamoto #include<iostream> #include<cstdio& ...
- 洛谷P3724 [AH2017/HNOI2017]大佬(决策单调性)
传送门 这个思路很妙诶->这里 以下为了方便,我把自信说成血量好了 虽然表面上看起来每一天有很多种选择,然而我们首先要保证的是不死,然后考虑不死的情况下最多能拿出多少天来进行其他操作.不死可以d ...
- BZOJ_2216_[Poi2011]Lightning Conductor_决策单调性
BZOJ_2216_[Poi2011]Lightning Conductor_决策单调性 Description 已知一个长度为n的序列a1,a2,...,an. 对于每个1<=i<=n, ...
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP
洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...
- 洛谷 P3580 - [POI2014]ZAL-Freight(单调队列优化 dp)
洛谷题面传送门 考虑一个平凡的 DP:我们设 \(dp_i\) 表示前 \(i\) 辆车一来一回所需的最小时间. 注意到我们每次肯定会让某一段连续的火车一趟过去又一趟回来,故转移可以枚举上一段结束位置 ...
随机推荐
- 一款批量linux管理工具batchshell
BatchShell是什么? BatchShell是一款基于SSH2的批量文件传输及命令执行工具,它可以同时传输文件到多台远程服务器以及同时对多台远程服务器执行命令.BatchShell基于原生的sh ...
- dubbo之令牌验证
防止消费者绕过注册中心访问提供者 在注册中心控制权限,以决定要不要下发令牌给消费者 注册中心可灵活改变授权方式,而不需修改或升级提供者 可以全局设置开启令牌验证 <!--随机token令牌,使用 ...
- hibernate工作流程、session
hibernate是对jdbc的封装,不建议直接使用jdbc的connection操作数据库,而是通过session操作数据库.session可以理解为操作数据库的对象. session与connec ...
- Discuz 取消 应用更新提醒 方法
管理员每次登录论坛,遇有后台没有更新的应用都会有应用更新提醒提醒,而且关了还会继续弹出,问题是有些应用原来我装了免费的,新版本推出来了是 要收费的,我不想要更新,或者是即使有免费的新版本了,而我只要使 ...
- if判断,while循环,for循环
if判断 if判断其实就是让计算机模拟人的判断 if if 条件: 代码1 代码2 代码3 ... # 代码块(同一缩进级别的代码,例如代码1.代码2和代码3是相同缩进的代码,这三个代码组合在一起就是 ...
- std::vector遍历
std::vector是我在标准库中实用最频繁的容器.总结一下在遍历和创建vector时需要注意的一些地方. 在不考虑线程安全问题的前提下,在C++11中有五种遍历方式. 方式一 for (size_ ...
- pip/pip3国内源
Error 在使用pip3安装PySide2时出现ReadTimeoutError. $ pip3 install PySide2 Solution 使用国内源 例如: $ pip3 install ...
- JSONP代码收藏
摘抄自jQuery,用于JSONP请求. var callback = 'callback_' + (new Date() - 0), url = 'http://localhost/', scrip ...
- vue轮播插件vue-awesome-swiper
https://surmon-china.github.io/vue-awesome-swiper/ 第一步安装 npm install vue-awesome-swiper --save 第二部在m ...
- [HZOJ10420]计算
[HZOJ10420]计算 题目 给定一个数列,第i个位置包含两个数ai,bi 每次询问给出x,y 求数列ai*x+bi*y的最大值 输入所有数为自然数,在int范围内 INPUT 第一行为n,m.n ...