CF1486D题解

题面

题意:
给你一个长度为 n 的数列 a ,求 a 中所有长度 k 的子串的中位数的最大值。


首先考虑二分答案。
然后想怎么去判断做到的这个 x 是否成立。我们定义一个数组 b ,其中 bi={1,aix1,ai<x 。则 [i,j] 区间中位数 x 的充要条件是 m=ijbm>0
首先想到前缀和维护,则条件变成了 SjSi>0
因为区间的长度不定,而我要尽可能的满足 SjSi>0 ,所以定义一个数组 m 来维护 S1Si 的最小值。那么,只要 Sjmjk>0 ,就说明在 [1,jk] 区间内存在一个 i 使得 SjSi>0 ,也就是说明 x 是一个可行解。
由此去二分即可。

代码

posted @   1358id  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示