关注
由于同时和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
牛客热帖
更多
- 1... 都在找Agent开发,我整理了80道相关的Agent开发面试题。2.1W
- 2... 被笔试耽误了一天day16(为什么携程第三题始终是0呢5230
- 3... 27后端暑期实习-字节-中国广告与交易(已OC3732
- 4... 美团暑期前端一面面经2153
- 5... 双非后端10天速通字节暑期2018
- 6... #拼多多集团-PDD笔试# PDD 3.29 笔试 A了 3道,第四题不太会,有友友A出来了吗,感觉题目比较复杂。1870
- 7... 京东后端面经1830
- 8... 3.29 pdd笔试1749
- 9... 3.29携程笔试1632
- 10... 27届暑期实习腾讯PCG前端面经1628
正在热议
更多
# 大厂实习和小厂实习最大的区别是什么? #
3827次浏览 24人参与
# 参加完秋招的机械人,还参加春招吗? #
120107次浏览 764人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
19442次浏览 312人参与
# 牛友の3月总结 #
3540次浏览 33人参与
# 拼多多工作体验 #
52850次浏览 344人参与
# 面试被问到不会的问题,你怎么应对? #
1027次浏览 12人参与
# 招商银行数字金融训练营 #
40945次浏览 401人参与
# 这些公司卡简历很严格 #
95369次浏览 418人参与
# 研究所VS国企,该如何选 #
259204次浏览 2013人参与
# 通信硬件知识分享 #
48192次浏览 538人参与
# 实习最想跑路的瞬间 #
131057次浏览 740人参与
# 找AI工作可以去哪些公司? #
18812次浏览 869人参与
# 从事AI岗需要掌握哪些技术栈? #
16114次浏览 976人参与
# 你做过最难的笔试是哪家公司 #
49711次浏览 876人参与
# 机械人怎么评价今年的华为 #
231829次浏览 1538人参与
# 材料人的华为红黑体验 #
41617次浏览 200人参与
# 金三银四,你的春招进行到哪个阶段了? #
25130次浏览 300人参与
# 说说你知道的学历厂 #
391088次浏览 1379人参与
# AI面会问哪些问题? #
38128次浏览 1195人参与
# 想给25届机械人的秋招建议 #
47830次浏览 251人参与
# 如何排解工作中的焦虑 #
292850次浏览 2606人参与
# 机械人避雷的岗位/公司 #
62953次浏览 395人参与