求集合MEX
  • 板块学术版
  • 楼主uid_310801
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/11/7 16:08
  • 上次更新2023/11/4 01:09:59
查看原帖
求集合MEX
310801
uid_310801楼主2021/11/7 16:08

我们定义:称未从该集合中出现的最小正整数为该集合的 MEX\operatorname{MEX} ,如集合 D={1,1,4,5,1,4,2}D=\{1,1,4,5,1,4,2\}MEX\operatorname{MEX} ,即MEX(D)=3\operatorname{MEX}(D)={3}

描述

现在有一个空的可重正整数集合 SS,有 nn 次操作。

1 l r 表示把整数 l,l+1...r1,rl,l+1...r-1,r 加入到 SS 中;

2 表示询问集合 SSMEX\operatorname{MEX}

3 x 表示把集合SS中的所有值为xx的数删掉(如果集合中没有 xx 可以选择忽略)

输入

第一行一个整数 nn.

接下来 nn 行:

  • 1 l r 表示把整数 l,l+1...r1,rl,l+1...r-1,r 加入到 SS 中(保证lrl\leqslant r);

  • 2 表示询问集合 SSMEX\operatorname{MEX}

  • 3 x 表示把集合SS中的所有值为xx的数删掉.

输出

对于每个操作2,输出一个数表示询问的答案,一个数一行。

样例1

Input:
6
1 5 7
1 1 3
3 6
2
1 3 4
2
Output:
4
6

样例1说明

集合一开始为空。

  • 加入5,6,7,S={5,6,7};5,6,7,S=\{5,6,7\};
  • 加入1,2,3,S={1,2,3,5,6,7};1,2,3,S=\{1,2,3,5,6,7\};
  • 删除6,S={1,2,3,5,7}6,S=\{1,2,3,5,7\}
  • MEX(S)=4\operatorname{MEX}(S)={4}
  • 加入3,4,S={1,2,3,3,4,5,7}3,4,S=\{1,2,3,3,4,5,7\}
  • MEX(S)=6\operatorname{MEX}(S)={6}

数据规模与约定

本题采用捆绑测试。

  • Subtask 1 (5 pts) : n100,l,r105n\leqslant 100,l,r\leqslant 10^5
  • Subtask 2 (25 pts) : n103n\leqslant 10^3
  • Subtask 3 (10 pts) : l,r105l,r\leqslant 10^5,且没有删除操作;
  • Subtask 4 (25 pts) : l,r105l,r\leqslant 10^5
  • Subtask 5 (35 pts) : 无特殊限制。

对于 100%100\% 的数据,保证n2×105,1lr109n\leqslant 2\times 10^5,1\leqslant l \leqslant r\leqslant 10^9;


【解法】??

对于10510^5的值域,开个线段树暴力就好。

对于10910^9的值域,先离线,离散化,然后对于每个数aia_i,设它离散化为bib_i,然后再开一个ai+1a_i+1离散化为bi+0.5b_{i+0.5}。如果处理时ai+1==ai+1a_{i+1}==a_i+1,就带上bi+0.5b_i{+0.5},就好了(吧)?


求正确性证明,和直接用map数组开线段树的可能性和时间复杂度。

2021/11/7 16:08
加载中...