题目:
给定一个长度为 n 的序列 {an},对于每个 i∈[1,n] ,求出一个最小的非负整数 p ,使得 ∀j∈[1,n],都有 aj≤ai+p−√|i−j|。
1≤n≤5×105,0≤ai≤109。
题解:
先考虑把 pi 单独移到一边。
pi≥aj−ai+√|i−j|
pi=nmaxj=1{aj+√|i−j|}−ai
直接考虑拆开绝对值。
pi=max(imaxj=1{aj+√i−j},nmaxj=i{aj+√j−i})−ai
单独看前一部分
pi=imaxj=1{aj+√i−j}−ai
显然后一部分即为第一部分翻转。
以下只考虑第一部分。
考虑对于每个 j,把 aj+√i−j 看成关于 i 的函数 fj。
答案即为在所有 j≤i 的函数中找到最值。
那么接下来考虑证明这玩意的决策单调性。
笔者几何不好,所以选择代数证明。
相信大家都会四边形不等式。(w(a,d)+w(b,c)≥w(a,c)+w(b,d),其中满足 a≤b≤c≤d)
即对于 fi=min{fj+w(j,i)},j∈[0,i],若函数 w 满足四边形不等式,则 f具有决策单调性。
设 w(i,j) 为 √i−j,钦定 c>a+1,得
∵w(a,c)=√c−a,w(a+1,c)=√c−a−1,w(a,c+1)=√c−a+1,w(a+1,c+1)=√c−a
∴w(a,c+1)+w(a+1,c)−w(a,c)−w(a+1,c+1)=√c−a−1+√c−a+1−2√c−a
令 d=c−a,
w(a,c+1)+w(a+1,c)−w(a,c)−w(a+1,c+1)=√d+1+√d−1−2√d=(√d+1−√d)−(√d−√d−1)
∵√x−√x−1 具有单调性
∴w(a,c+1)+w(a+1,c)≤w(a,c)+w(a+1,c+1)。
那么显然这个可以推广至 a,b,c,d。
由于本题求 max,因为将式子符号取反,易知满足决策单调性。
于是直接上两次单调队列就好了。
时间复杂度 O(n)。
本文作者:trsins
本文链接:https://www.cnblogs.com/trsins/p/15815378.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步