关注
由于同时和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
相关推荐
11-14 01:19
浙江理工大学 Java 点赞 评论 收藏
分享
牛客热帖
- 1... 大厂们也算是卷起来了。。3979
- 2... 【发帖有奖】新活动来啦,发帖评公司,最高可得100元京东卡~3777
- 3... 大四,双非二本,求指教,目前有一个offer但是一个月工资只有600要不要去啊3713
- 4... 3个月前的我未免对秋招过于乐观了3665
- 5... 求职银行的宝子们,最新的银行笔试题已公开,免费刷!3594
- 6... 西安荣耀嵌入式oc3538
- 7... 好消息是早就oc了,坏消息是一直没开奖3537
- 8... 互联网大厂再牛逼也搞不了工业软件3428
- 9... 开奖了,A到了398,000!3323
- 10... 数字马力 offer 啦!2834
正在热议
# 晒一晒我的offer #
9504166次浏览 103785人参与
# 数据人offer决赛圈怎么选 #
106271次浏览 1387人参与
# 签约/解约注意事项 #
300110次浏览 1878人参与
# 我的实习求职记录 #
5938110次浏览 82686人参与
# 机械制造面试点评 #
32909次浏览 268人参与
# 机械制造公司评价 #
81583次浏览 256人参与
# 大疆求职进展汇总 #
393774次浏览 2831人参与
# AI了,我在打一种很新的工 #
18885次浏览 424人参与
# 许愿池 #
202116次浏览 2484人参与
# 你的秋招第一场笔试是哪家 #
38045次浏览 533人参与
# 互联网没坑了,还能去哪里? #
1089289次浏览 12637人参与
# 入职第一天,你准备什么时候下班 #
20506次浏览 133人参与
# 你想留在一线还是回老家? #
7471次浏览 155人参与
# 非技术er求职现状 #
20234次浏览 186人参与
# 通信硬件公司评价 #
80609次浏览 354人参与
# 设计人如何选offer #
37773次浏览 464人参与
# 人生第一个10万你是多久存到的? #
18084次浏览 210人参与
# 那些拿到大厂offer的简历长啥样 #
104503次浏览 2044人参与
# 工作给你带来了哪些职业病 #
8300次浏览 96人参与
# 如何写一份好简历 #
591391次浏览 8335人参与