关注
由于同时和a[j]和j有关所以不能单纯维护当作斜率相关的问题来做
本问题是经典的决策单调性问题。
考虑我们选择j时如果j1>j2且a[j1]>a[j2]显然j2时候不如j1,因此我们用单调队列筛掉这些不符合条件的j2,最后得到一个单调下降子序列。
同理,选择i时如果i1<i2且a[i1]>a[i2]显然i2时候不如i1,帅选后i的选择区域也将在一个单调上升子序列中。
现在在一个单调上升子序列中选择i,一个单调下降子序列中选择j。
接下来考虑j对i1和i2的值f(i1,j)=(A[i1]+A[j])*(j-i1),f(i2,j)=(A[i2]+A[j])*(j-i2)作差
不妨设i1>i2
f(i1,j)-f(i2,j)=j*(A[i1]-A[i2])-(A[i1]*i1-A[i2]*i2)-A[j]*(i1-i2)
=(A[i1]-A[i2],i1-i2)·(j,-a[j])-(A[i1]*i1-A[i2]*i2)
显然,随着j的增大f(i1,j)-f(i2,j)单调递增,也就是说,对于任意i1,i2存在一个在j0之后
(f(i1,j)-f(i2,j))*(j-j0)>=0
故我们在i待选择的单调上升子序列中的每个相邻元素计算其分界的j即可。具体实现就是用一个单调栈维护每个分界点,每次对相邻两个元素二分其分界点,然后维护单调栈。
1.得到i的候选序列I={i1,i2...ip}
2.得到j的候选序列J={j1,j2...jq}
3.初始单调栈s为空
4.枚举x,根据f(ix,j)-f(ix+1,j)的算出分界点jx,将jx比栈顶元素小,不断把元素踢出,然后加入jx
5.根据单调栈中的元素,得到每个序列J最优的决策ix,计算,并求最大值。
PS:这个问题转化称这样可能更好理解,二维的点集A={(i,a[i])},B={(i,-a[i])},在A中取一个点,在B中取一个点,最后要求其面积最大,当然最后做法本质没区别
查看原帖
3 2
相关推荐
点赞 评论 收藏
分享
小型域名服务器:当看到别人比自己强的时候,即便这是对方应得的,很多人会也下意识的歪曲解构对方的意图,来消解自己在这本就不存在的比较中输掉的自信,从而平白制造出很多无谓的争论。比如你会在空余时间来写优质好文,而我回家只会暗区突围,那么我就可以作为键盘侠在这里评论你是不是XXXXXXXX。即便我自己都知道这是假的,但只要这没那么容易证伪,那么当你开始回应的时候,脏水就已经泼出去了,后面可能会有更多的人带着情绪来给我点赞,而毫不关注你写的文章内容本身是啥了。 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 实习的你做了哪些离谱的工作 #
3130次浏览 51人参与
# 工作压力大,你会干什么? #
2749次浏览 78人参与
# MiniMax求职进展汇总 #
1359次浏览 25人参与
# 参加哪些竞赛对找工作有帮助? #
3069次浏览 66人参与
# 找实习记录 #
6389次浏览 124人参与
# 我的付费上班经历 #
5064次浏览 97人参与
# 邪修省钱套路 #
2113次浏览 82人参与
# AI让你的思考变深了还是变浅了? #
888次浏览 31人参与
# 如果不上班,你会去做什么 #
2048次浏览 75人参与
# 为了入行xx岗,我学了__ #
1744次浏览 33人参与
# 简历第一个项目做什么 #
1776次浏览 43人参与
# 你找工作的时候用AI吗? #
167410次浏览 868人参与
# 毕业论文进行时 #
24768次浏览 146人参与
# 如何排解工作中的焦虑 #
257510次浏览 2376人参与
# 大厂面试初体验 #
86573次浏览 398人参与
# 毕业旅行去哪玩儿 #
21849次浏览 148人参与
# 硬件人秋招进展 #
265492次浏览 3971人参与
# 你觉得面试是靠实力还是靠运气 #
27455次浏览 312人参与
# 影石Insta360求职进展汇总 #
170618次浏览 1347人参与
# 你们的毕业论文什么进度了 #
1235830次浏览 9923人参与
# 记录实习开销 #
175450次浏览 670人参与
查看1道真题和解析
