CF1887D Split 题解

Problem - D - Codeforces

Split - 洛谷

  • 我现在水平好烂,再做下去自信心就全败没了

  • 先考虑 Q=1 怎么做?

  • 两种做法:

    • 暴力枚举分界点,左右判断

    • 暴力枚举 maxi=lxai,找到最靠右边的分界点位置 x,判断是否 maxi=lxai<mini=x+1rai

  • 如果你选择优化第一个方法,因为暴力枚举分解点显然没有单调性,判断复杂度也不能整体考虑,因此考虑第二种做法的优化

  • 暴力枚举依然没有优化空间,考虑后面这个问题如何整体算。

  • 既然我们都枚举了最大值,肯定和极值的大小关系有关嘛。我们枚举 ai 作为最大值,则记左边最近的 x 满足 ax>ai,记右边最近的 y 满足 ai<ay,记在 y 右边最近的 z 满足 ai>az。则发现当 x<liyr<z[l,r] 满足条件。

  • 我们把区间 [l,r] 看成一个点,这显然就是一个矩形加单点查的问题。可以使用树状数组 + 扫描线解决

  • 怎么求 x,y,z?没有要求线性,set 即可

  • 单调栈应该不可做,因为 z 的限制不是 ay>az

  • 最终复杂度 O(nlogn)

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