1 solutions
-
3
题意
定义合法区间为区间长度大于等于L的区间,找到所有合法区间内最大的中位数。
题解
如果去掉区间限制,那最大中位数就是只取最大的数,这方面好像没什么可优化的点。我们转成另一个问题,判断是否存在一个合法区间的最大中位数大于等于。
如何判定这个问题? 一个长度为的区间内,假设小于的数一共有个,那是否应该为 ,就可以说明中位数大于等于。
所以前面的问题变成了如何判定一个区间,大于等于的数的数量 小于它的数的数量。我们把大于等于的数写成,其它写成。就变成了 。问题变成了找到一个区间的和大于等于 。
如何找到一个合法区间的和大于等于?
设前缀和数组为即判断是否存在使得且。我们枚举 ,就知道 的合法区间是一个前缀(即),那就是要找这个前缀里找到的值最小。那就可以使得最大。判定它是否大于。
假设我们知道 表示合法区间存在中位数大于等于 。那我们只要找到一个最大,可以注意到定义和前面,我们发现随着增大,这个条件越不容易满足。所以是满足单调性的。那只需要二分即可。
- 1
Information
- ID
- 4
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 6
- Tags
- # Submissions
- 31
- Accepted
- 8
- Uploaded By