关注
由于同时和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
相关推荐
![](https://static.nowcoder.com/fe/file/oss/1716965564844UEBJN.png)
![](https://static.nowcoder.com/fe/file/oss/1716965585666UBBME.png)
深信服
| 校招
| 16个岗位
点赞 评论 收藏
分享
![](https://static.nowcoder.com/fe/file/oss/1715049343797JOCFB.png)
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我在牛爱网找对象 #
147364次浏览 1150人参与
# 哪些公司校招卡第一学历 #
45127次浏览 171人参与
# 职场上哪些事情令人讨厌 #
11637次浏览 56人参与
# 你知道哪些职场黑话? #
20738次浏览 176人参与
# 你的领导最像哪种动物,为什么? #
8760次浏览 90人参与
# 工作中哪个瞬间让你想离职 #
21093次浏览 154人参与
# 入职第一天,你准备什么时候下班 #
29682次浏览 207人参与
# 运营面经 #
84273次浏览 1044人参与
# 你遇到过哪些神仙同事 #
40416次浏览 387人参与
# 春招启动,你开始投递了吗? #
29538次浏览 336人参与
# 你觉得机械有必要实习吗 #
33147次浏览 316人参与
# 职场吐槽大会 #
133481次浏览 1112人参与
# 设计人如何选offer #
61838次浏览 573人参与
# 哪些企业的面试体验感最差? #
18400次浏览 193人参与
# 美的求职进展汇总 #
224023次浏览 1663人参与
# 腾讯音乐求职进展汇总 #
46295次浏览 269人参与
# 招聘要求与实际实习内容不符怎么办 #
35546次浏览 441人参与
# vivo求职进展汇总 #
164494次浏览 1014人参与
# 如何KTV领导 #
27574次浏览 210人参与
# 比亚迪春招开了,你投递了吗? #
35926次浏览 139人参与