题解 | 中位数

中位数

https://www.nowcoder.com/practice/ecf14c98138a42e1b2da25cf202a316d

def check(a,n,m,x):
    pre=[0]*(1+n)
    for i in range(1,n+1):
        pre[i]=pre[i-1]+(1 if a[i-1]>=x else -1)
    pre_l=pre[0]
    for r in range(1,n+1):
        if r >=m:
            pre_l=min(pre_l,pre[r-m])
            if pre[r]-pre_l>0:
                return True
    return False
T=int(input())
for i in range(T):
    n,m=map(int,input().split())
    a=list(map(int,input().split()))
    l,r=0,10**9
    while l<r:
        mid=(l+r+1)//2
        if check(a,n,m,mid):
            l=mid
        else:
            r=mid-1
    print(l)


        

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务