中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数. 首先,显然有n^2logn的算法. 考虑枚举每个数x,求满足包含其的区间中这个数是中位数的区间个数. 考虑前缀和,记S1[i]表示前i个数里面>x的个数,S2[i]表示前i个数里面<x的个数. 对于任意满足条件的区间[l,r],则有S2[r]-S2[l]=S1[r]-S1[l]. 转化得S2[r]-S1[…