BZOJ2216: [Poi2011]Lightning Conductor(DP 决策单调性)
题意
题目链接
Sol
很nice的决策单调性题目
首先把给出的式子移项,我们要求的$P_i = max(a_j + \sqrt{|i - j|}) - a_i$。
按套路把绝对值拆掉,$p_i = max(max_{j = 1}^i (a_j = \sqrt{i - j}), max_{j = i + 1}^n (a_j + \sqrt{j - i})) - a_i$
对于后面的一段,我们把序列翻转之后和前一段是等价的。
也就是说,我们现在只需要找到$P_i = max_{j = 1}^i (a_j + \sqrt{i - j})$
考虑到式子中只有一个max函数,那这玩意儿应该是有决策单调性的
直接设$f_j = a_j + \sqrt{i - j}, i \geqslant j$,其中$i$是自变量
观察这个函数,应该是一个在$[j, INF]$内有定义,过点$(j, a[j])$的函数,且增速与函数$g_i = \sqrt{i}$相同
我们需要做的,就是对每个$i$,找到最大的$f_j$
考虑到$g_i$增长速度会越来越慢,所以一个函数增长到一定程度后可能会被另一个函数取代
直接用单调队列维护,设$K_{i, j}$表示$f_i, f_j$的交点,$h, t$分别表示队首/尾,
当新加入一个元素$i$的时候,显然,若$K_{t -1, t} > K_{t - 1, i}$,那么$t$这个函数是没用的、
当$K_{h, h+1} < i$的时候,弹出队首
就是最后输出答案的时候有点“卡精度”,真恶心
经验:
以后看到$f_i = max(f_j) + g$的式子一定要往单调性上想,如果单调性不是很显然的话可以用换元法设函数找单调性
另外绝对值拆开算一般会好算一些
#include<bits/stdc++.h>
#define Pair pair<int, int>
#define MP(x, y) make_pair(x, y)
#define fi first
#define se second
using namespace std;
const int MAXN = 1e6 + , INF = 1e9 + ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int N, a[MAXN], q[MAXN], Cro[MAXN];
double P[MAXN], sqr[MAXN];
double calc(int j, int i) {
return a[j] + sqr[i - j];
}
int K(int x, int y) {
int l = max(x, y), r = N, ans = N + ;
while(l <= r) {
int mid = l + r >> ;
if(calc(x, mid) >= calc(y, mid)) l = mid + ;
else r = mid - , ans = mid;
}
return ans;
}
void solve() {
int h = , t = ;
for(int i = ; i <= N; i++) {
while(h < t && K(q[t - ], q[t]) >= K(q[t], i)) t--;
q[++t] = i;
while(h < t && K(q[h], q[h + ]) <= i) h++;
P[i] = max(P[i], calc(q[h], i));
}
}
main() {
N = read();
for(int i = ; i <= N; i++) a[i] = read(), sqr[i] = sqrt(i);
solve();
reverse(a + , a + N + );
reverse(P + , P + N + );
solve();
for(int i = N; i >= ; i--)
printf("%d\n", max(, (int)ceil(P[i]) - a[i]));
return ;
}
BZOJ2216: [Poi2011]Lightning Conductor(DP 决策单调性)的更多相关文章
- 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( ...
- P3515 [POI2011]Lightning Conductor(决策单调性分治)
P3515 [POI2011]Lightning Conductor 式子可转化为:$p>=a_j-a_i+sqrt(i-j) (j<i)$ $j>i$的情况,把上式翻转即可得到 下 ...
- 洛谷P3515 [POI2011]Lightning Conductor(决策单调性)
题意 已知一个长度为n的序列a1,a2,...,an. 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt(abs(i-j)) ...
- 【洛谷3515】[POI2011] Lightning Conductor(决策单调性)
点此看题面 大致题意: 给你一个序列,对于每个\(i\)求最小的自然数\(p\)使得对于任意\(j\)满足\(a_j\le a_i+p-\sqrt{|i-j|}\). 证明单调性 考虑到\(\sqrt ...
- bzoj 2216: [Poi2011]Lightning Conductor【决策单调性dp+分治】
参考:https://blog.csdn.net/clove_unique/article/details/57405845 死活不过样例看了题解才发现要用double.... \[ a_j \leq ...
- bzoj2216: [Poi2011]Lightning Conductor(分治决策单调性优化)
每个pi要求 这个只需要正反DP(?)一次就行了,可以发现这个是有决策单调性的,用分治优化 #include<iostream> #include<cstring> #incl ...
- [POI2011]Lightening Conductor(决策单调性)
好久没写过决策单调性了. 这题其实就是 $p_i=\lceil\max\limits_{j}(a_j-a_i+\sqrt{|i-j|})\rceil$. 拆成两边,先只考虑 $j<i$,然后反过 ...
- BZOJ2216 : [Poi2011]Lightning Conductor
$f[i]=\max(a[j]+\lceil\sqrt{|i-j|}\rceil)$, 拆开绝对值,考虑j<i,则决策具有单调性,j>i同理, 所以可以用分治$O(n\log n)$解决. ...
随机推荐
- BZOJ4085: [Sdoi2015]音质检测
BZOJ4085: [Sdoi2015]音质检测 由于这题太毒了,导致可能会被某些人卡评测,于是成了一道权限题... 本蒟蒻表示没钱氪金... 但是可以去洛谷/Vijos搞搞事... 但是洛谷上只能评 ...
- Servlet编程实例
---------------siwuxie095 登录实例: 从 login.jsp 提交登录信息到 LoginServlet,在 LoginServlet 中打印登录信息 工程结构目录如下: Lo ...
- change和onchange、click和onclick的区别
change和onchange.click和onclick的区别: onchange和onclick都是js方法 可以在标签元素上使用 <input onchange="" ...
- ps&CPU
#include <pthread.h> void f();int main() { f(); return 0;} void f() { int ...
- Ocelot - .Net Core开源网关
Ocelot - .Net Core开源网关 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/10857688.html 源码地 ...
- python之02数据类型学习-作业练习
题目: 购物车程序 salary = 5000 1. iphone6s 5800 2. mac book 9000 3. coffee 32 4. python book 80 5. bicyle 1 ...
- Hadoop localhost ssh 免密码登陆
配置本地ssh免密码登陆,遇到很奇怪的问题,原来在公司电脑上,是按照 http://blog.csdn.net/hackerwin7/article/details/28109073 这里说的配置的, ...
- python文件名匹配
待匹配文件:#FY3D_IPMNT_GBAL_L1_20180516_0003_030KM_MS.HDF 干扰文件:#FY3D_IPMNT_GBAL_L1_20180516_0003_030KM_MS ...
- 求组合数 C(n,m)
下面内容转自: http://blog.csdn.net/zengaming/article/details/63681754 一.求解C(n, m) 公式一: 公式二: 公式二可以这么理解,从n个物 ...
- docker 推送镜像到私有地址
下面针对的都是docker官网的地址 先登录 docker login 输入docker ID ID不是你的注册邮箱,指的是你登录后显示的ID,然后输入密码 ....此时认为你已经登陆成功了 接着看下 ...