[ABC107D] Median of Medians
检查是否有(m+1)/2个区间的中位数>=x,其中m为区间个数
设b为 b[i]=a[i]>=x?1:-1这样的一个数组,则有如下的等价check
b数组区间和>=0的区间个数 >= (m+1)/2.
下面需要用权值树状数组,用前缀和的值作为树状数组的索引.
当扫到j的时候,在树状数组上查询pre[j],得到有多少个pre[i]是<=pre[j]的,而因为是从左向右扫,所以i<j,即[i+1,j]是满足区间和>=0的区间。
所以这样扫一遍,就用n\log n的复杂度求得了上述区间个数