NOI Online 2022

LG P8251 [NOI Online 2022 提高组] 丹钓战

  • 对于每个括号预处理出向左的 \(pre\) ,拿主席树来查询区间内 \(pre<l\) 的个数即可

P8252 [NOI Online 2022 提高组] 讨论

  • 先考虑包含一个题目的人的集合 S ,在这个集合中是否存在两个不互相包含的人

  • 那你考虑两个都互相包含的情况就是将所有人以题目数量排序后,相邻之间都互相包含

  • 那么反之就是如果存在相邻间不包含,就找到了一组答案

  • 但是这样的复杂度肯定不大对,但是我们仍然可以参考这个方法

  • 还是对于数量排序,假设当前考虑到 \(x\) ,那么枚举 \(x\) 的每一个题目,对于每一题目记录上一个出现的人,然后对于两者进行判断是否互相包含

  • 因为当前已经枚举到了 \(x\) 说明之前只存在包含或者相交为空的情况

  • 考虑判断两个集合是否包含可以判断两个集合相交后的大小是否等于小的集合的大小

  • 那么我们扫一遍 \(x\) 的每个题目,每个题目只会和一个 \(lst\) 做贡献,因为之前说了,集合只存在包含或者完全不相交,所以这里是正确的

  • 总的复杂度就是 \(O(n\log n+m)\)

posted @ 2022-06-04 11:40  Kzos_017  阅读(27)  评论(0编辑  收藏  举报