qoj8182 Bag of Bags

题意

定义一个物品的属性有 \(a,b\),且 \(a<b\)

定义两个物品 \(i,j\) 相等仅当 \(a_i<b_j\)\(a_j<b_i\)

有一个物品背包,初始为空。

\(q\) 次操作,每次操作给出一个物品,若将这个物品加入背包后,存在三个物品 \(i,j,k\) 满足 \(i=j,j=k,k\neq i\),则不将该物品加入背包,否则加入。

你需要在每次操作后输出该物品的加入状态。

\(q\le 3\times 10^5\)

思路

有点抽象的,题目硬控我好久。

两个物品相等可以看作两组闭区间有交集,因此如果要加入的一个物品与某个区间有交集,则它要与和这个区间有交集的所有区间都有交集。

于是我们维护一个交集区间集合。每次加入一个区间之后,若该区间与其他区间没有交集,则往交集区间集合中新加入一个区间,否则若该区间未与有交的区间对应的所有交集区间有交,则不能加入,否则加入并更新交集区间。

当几段区间在一起时,可以直接存入并集,不会影响结果。

posted @ 2025-09-09 15:41  WuMin4  阅读(13)  评论(0)    收藏  举报