CF1826D

原题

翻译

这题乍一看不太好做,当时还想了单调栈或改变枚举顺序之类的做法,但都不可做

但仔细一想,我们发现答案的blbr一定会被选到,否则我们可以把没用的部分去掉,这样b1+b2+b3的值不会变,rl还会变小,这一步是缩小答案的范围

然后我们发现这个条件还是很严格,因为我们没法保证blbr(l,r)内的一个数恰好就是这个区间[l,r]的前三大值

但我们发现我们没必要总是取到这个条件,我们考虑把一定不对的答案也加入可能的答案的集合中。我们枚举一个i,表示bi一定选到,则可以确定l可能的范围为[1,i),同样的,r(i,n],这样我们可以求出前缀最大的bl+l和后缀最大的brr,分别记作preisufi,然后可以直接用bi+prei1+sufi+1来更新答案

为什么这样一定是对的呢,因为发现如果bi并不是[l,r]的最大值,不妨设[l,r]的最大值为bj,则当i枚举到j的时候显然会再把正确的答案算一遍,而这个答案显然是不劣于上一个答案的,因此即使我们加入了错误的限制也无妨

最终复杂度O(n)

posted @   FOX_konata  阅读(14)  评论(0编辑  收藏  举报
相关博文:
·  CF1837F
·  CF1823D
·  CF1826D
·  CF1730
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示