码迷,mamicode.com
首页 > 其他好文 > 详细

roi 学习轨迹

时间:2020-12-24 11:39:23      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:tco   选择   两种   前缀   加法   全选   时间复杂度   roi   sum   

和某atcoder题的idea很像。
转化比较巧妙。
把两种学校的课程作为两维。
把平面划分成\((n+2)*(m+2)\)个矩形。
\(x,y\)作前缀和。
如果\(x\)有一个值\(a\),则画一条\(x=a\)的线。
如果\(y\)有一个值\(b\),则画一条\(y=b\)的线。
然后我们就要在这些直线的交点上选择一个矩形,使得周长最大。
(其实我本来也想到把两种学校的课程作为两维的,但是以为是错的)
相同元素不能选相当于平面上有一些障碍。矩形不能包含障碍。
借用官方题解的一张图:
技术图片
考虑分治。如果我们取一条处在中间的直线\(l\),计算过\(l\)的方案。
考虑枚举矩形的底边。则随着顶边的向上移动,矩形能够取的左/右边界会一直向内缩。
技术图片
可以使用单调栈+线段树区间加法。
时间复杂度\(O(n\log_2^2n)\)
实际上我们只需要分治一次,因为最优方案一定过中线。
如果我们不选择一个序列的元素,另一个序列的元素可以全选,答案至少为\(max(\sum x,\sum y)\)
所以我们一定会选择中线。
时间复杂度\(O(n\log_2n)\)

roi 学习轨迹

标签:tco   选择   两种   前缀   加法   全选   时间复杂度   roi   sum   

原文地址:https://www.cnblogs.com/ctmlpfs/p/14158115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!