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\)
思路
有点抽象的,题目硬控我好久。
两个物品相等可以看作两组闭区间有交集,因此如果要加入的一个物品与某个区间有交集,则它要与和这个区间有交集的所有区间都有交集。
于是我们维护一个交集区间集合。每次加入一个区间之后,若该区间与其他区间没有交集,则往交集区间集合中新加入一个区间,否则若该区间未与有交的区间对应的所有交集区间有交,则不能加入,否则加入并更新交集区间。
当几段区间在一起时,可以直接存入并集,不会影响结果。

浙公网安备 33010602011771号