P5482 [JLOI2011] 不等式组
P5482 [JLOI2011] 不等式组
这道题比板子还是难不少,因为有大量的分类讨论。
看到题就可以考虑平衡树了。
,不等号方向不变, 。 ,不等号方向改变, 。 , ,特判。
对于情况3,我们考虑如果开始时就不满足就不管了(因为它没有贡献,删不删除无所谓);如果满足,那么记录它是第三类,在删除时更新答案(对于可能重复删除的问题,开个数组记录一下;再弄两个数组,一个 all
表示是不是情况3,t
表示是不是情况1、2,比较简单)。
我们处理完了情况3,接下来看1、2。
由于用分数在转换成小数的时候很麻烦(当然你可以直接把分数放到平衡树里,但是板子要进行很大的改动),又考虑到查询时
首先如果分数恰好整除,就不管。
比如
再举个小于号的例子。
比如
然后由于 C++
的整除是向零取整,于是我们得自己搞一个。
首先如果是整数,特判;
其次,如果二者同号,结果为正,用一般的除法(此时 C++
相当于向下取整),向上取整结果
如果异号,结果为负,用一般的除法(此时 C++
相当于向上取整),向下取整结果
至此,搞定了条件转换。
然后我们考虑满足条件的要求。
用数轴进行理解。
对于大于条件,我们发现就是查询平衡树中小于
对于小于条件,我们发现就是查询平衡树中大于
至此,问题就变成了两棵平衡树,分别在它们中插入、删除,然后每次询问给定的数在两棵平衡树中的排名。
复杂度
本文作者:wscqwq
本文链接:https://www.cnblogs.com/wscqwq/p/17624949.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步