【题解】CF1539F Strange Array 中位数 线段树区间合并 取整性质

题目链接

若序列中的数互不相同,对于一个区间 \([l,r],l\le i\le r\) ,令 \(c_1\) 为区间中小于等于 \(a[i]\) 的位置的数量,\(c_2\) 为区间中大于 \(a[i]\) 的位置的数量。

对于 \(a[i]\) 在区间中的排名可以转化成小于等于 \(a[i]\) 的数的个数,中位数的排名为 \(\lceil \dfrac{c_1+c_2+1}{2} \rceil\)

取整性质:\(-\lceil r \rceil = \lfloor -r \rfloor,-\lfloor r \rfloor = \lceil -r \rceil\),\(\forall n\in Z,\lceil x + n\rceil = \lceil x \rceil + n,\lfloor x + n\rfloor = \lfloor x \rfloor + n\)

如果中位数 \(a[mid] <= a[i]\) ,那么 \(dis = c_1 - \lceil \dfrac{c_1+c_2+1}{2} \rceil = \lfloor \dfrac{c_1-c_2-1}{2} \rfloor\)

如果中位数 \(a[mid] >= a[i]\) ,那么 \(dis = \lceil \dfrac{c_1+c_2+1}{2} \rceil - c_1 = \lceil \dfrac{c_2+1-c_1}{2} \rceil\)

将序列上 \(> a[i]\) 的位置置成 \(1\)\(< a[i]\) 的位置置成 \(-1\) ,根据 \(a[i]\) 和中位数的关系分类讨论,将 \(a[i]\) 置成 \(-1\)\(1\)

线段树维护前后缀 \(\max,\min\) 区间合并即可。

复杂度 \(O(n\log n)\)

代码记录

posted @ 2021-09-11 10:53  Themaxmaxmax  阅读(42)  评论(0编辑  收藏  举报