CF1896D 题解

Solution

l,r 能使 i=lrai=S

考虑先令 l=1,那么如果存在 i=1r=S,即输出 YES。如果没有,则一定有 i=1r=S1,且 ar+1=2

考虑对 l,r 进行调整:将 l 向左移,r 向右移。可以发现当 1l 全部为 2,且 rr 全部为 2,且 ar+1=1al+1=1,ar=2 时,条件成立。

于是考虑用线段数维护出区间内 1 出现的次数,记为 cnt12 的出现次数显然可以用区间长度减去 cnt1 得到,记为 cnt2。然后用二分求出 1 左边第一次出现的 1 的位置,记为 pos1,以及 r 左边第一次出现的 1,记为 pos2

接下来考虑答案:如果 pos1=1,显然无解;如果 pos2=1,且 pos11>nr,说明 r 后面没有足够的 2,无解。当 pos1,pos2 都不为 1 时,显然有解。

考虑再记录区间和,方便找到初始的 r。显然我们可以使用二分套线段树的方法,时间复杂度为 O(nlog2n),但在线段树上二分可以优化到单 log

posted @   Celestial_cyan  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Apifox不支持离线,Apipost可以!
· 历时 8 年,我冲上开源榜前 8 了!
· Trae 开发工具与使用技巧
· 通过 API 将Deepseek响应流式内容输出到前端
· 分享一个我遇到过的“量子力学”级别的BUG。
点击右上角即可分享
微信分享提示