总结:对于你不需要知道的数据,维护你[horse]呢
容易发现,我们只需要查询第(q)位置上的数字的值。
于是我们可以将数字转换成大于等于(q)的(ig(1ig))和比(q)小的(ig(0ig))。
对于每一个线段树的节点,需要维护以下信息:
- 懒标记:这个区间需要被改成什么样子
- 有多少个(0)
当我们要修改一个节点(这个节点的区间为(ig[l,rig])的时候:
- 那么问题就转化成了
Update(l,l+cnt0,0),Update(l+cnt0+1,r,1)
(升序) - 降序同理
线段树区间覆盖,区间询问(0)个数
然后套上个二分:
显然的,对于两个二分值A1,A2
,满足A1<A2
,那么CNT1>CNT1'
于是这个点的权值就能通过二分判定了.