roi 学习轨迹
和某atcoder题的idea很像。
转化比较巧妙。
把两种学校的课程作为两维。
把平面划分成(n+2)∗(m+2)个矩形。
把x,y作前缀和。
如果x有一个值a,则画一条x=a的线。
如果y有一个值b,则画一条y=b的线。
然后我们就要在这些直线的交点上选择一个矩形,使得周长最大。
(其实我本来也想到把两种学校的课程作为两维的,但是以为是错的)
相同元素不能选相当于平面上有一些障碍。矩形不能包含障碍。
借用官方题解的一张图:
考虑分治。如果我们取一条处在中间的直线l,计算过l的方案。
考虑枚举矩形的底边。则随着顶边的向上移动,矩形能够取的左/右边界会一直向内缩。
可以使用单调栈+线段树区间加法。
时间复杂度O(nlog22n)
实际上我们只需要分治一次,因为最优方案一定过中线。
如果我们不选择一个序列的元素,另一个序列的元素可以全选,答案至少为max(∑x,∑y)
所以我们一定会选择中线。
时间复杂度O(nlog2n)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步