【MX-S1-T2】催化剂
题目描述
小朋友们很喜欢糖果。
现在,小 K 有一些糖果,每个糖果上有一个数字代表它的种类。
有 $q$ 次事件,每次事件会加入一个糖果、或删除一个糖果、或提出一次询问。
每次询问会给出一个 $k$,表示小 K 现在需要将所有糖果分给 $k$ 个小朋友,并且每个小朋友都需要得到至少一个糖果。同时,小朋友们不喜欢得到相同的糖果。具体的,在一个小朋友得到了糖果 $i$ 时,如果 Ta 在这个糖果之前就已经获得过糖果 $i$,那么 Ta 就会感到非常生气,Ta 的愤怒值就会增加 $1$。
小 K 不喜欢看到小朋友们生气,但小 K 无法解决这么困难的问题,所以你需要帮小 K 求出一种分糖果的方式,最小化所有小朋友的愤怒值之和。
保证存在一种分糖果的方案,使得每个小朋友都分到至少一个糖果。
每次询问并没有真正的分糖果,即每次询问后小 K 拥有的糖果不会改变。
注意,分糖果的过程可以理解为将小 K 拥有的所有糖果划分到 $k$ 个非空序列,可以重排。
输入输出格式
输入格式
第一行两个正整数 $n,q$。
第二行 $n$ 个正整数 $a_1,a_2,\dots,a_n$,描述初始时小 K 拥有的糖果。
接下来 $q$ 行,每行两个正整数,描述一次操作,共有三种可能的输入:
`1 x`:表示小 K 又拥有了一个种类为 $x$ 的糖果。
`2 x`:表示小 K 丢失了一个种类为 $x$ 的糖果,保证此时小 K 拥有至少一个种类为 $x$ 的糖果。
`3 k`:表示此时小 K 需要把糖果分给 $k$ 个小朋友,你需要求出最小的所有小朋友的愤怒值之和。令 $S$ 表示此时小 K 拥有的糖果数量,保证 $1\le k\le S$。
输出格式
对于每次询问,输出一行一个整数,表示你求出的答案。
输入输出样例
输入样例 #1
5 4
3 5 2 5 5
3 2
2 5
1 5
3 1
输出样例 #1
1
2
输入样例 #2
5 15
2 5 2 5 1
2 1
1 1
1 2
1 4
1 1
3 2
1 1
3 1
1 5
3 1
1 2
3 1
2 1
3 3
2 2
输出样例 #2
1
5
6
7
1
说明
__【样例解释 1】__
第一次询问时,小 K 手上的糖果为 $\{3,5,2,5,5\}$,分给 $2$ 个小朋友的糖果为 $\{2,3,5\},\{5,5\}$,小朋友的愤怒值为 $0,1$。可以证明没有愤怒值之和更小的方案。
__【数据范围】__
__本题使用子任务捆绑测试。__
对于 $100\%$ 的数据,$1\le n,q\le 10^6$,$1\le a_i,x\le n$。每次询问时,令 $S$ 表示此时小 K 拥有的糖果数量,保证 $1\le k\le S$。
| 子任务编号 | $n\le $ | $q\le $ | 特殊性质 | 分值 |
| ---------- | ------- | ------- | ------------- | ---- |
| $1$ | $5$ | $15$ | 无 | $20$ |
| $2$ | $2000$ | $2000$ | 无 | $20$ |
| $3$ | $10^5$ | $10^5$ | 无 | $20$ |
| $4$ | $10^6$ | $10^6$ | $a_i,x\le 50$ | $10$ |
| $5$ | $10^6$ | $10^6$ | $k\le 50$ | $10$ |
| $6$ | $10^6$ | $10^6$ | 无 | $20$ |