#P14682. [Bulgarian2022]GCD 2.0

    ID: 13898 传统题 2000ms 512MiB 尝试: 6 已通过: 1 难度: 6 上传者: 标签>CF2000数论筛法模运算莫比乌斯反演数据结构数学前缀和

[Bulgarian2022]GCD 2.0

AB5.

初始时我们有一个集合:

S={a1,,aN}S=\{a_1,\dots,a_N\}

其中 a1,,aNa_1,\dots,a_N 两两不同。你需要维护两类操作:

  1. 向集合中加入 xx(即 SS{x}S \gets S \cup \{x\}),保证此时 xSx \notin S
  2. 从集合中删除 xx(即 SS{x}S \gets S \setminus \{x\}),保证此时 xSx \in S

我们关心所有非空子集的最大公约数之和,记为:

f(S)=QS, Q>0gcd(Q)f(S)=\sum_{Q\subseteq S,\ |Q|>0} \gcd(Q)

其中 gcd(Q)\gcd(Q) 表示集合 QQ 中所有元素的最大公约数。若 SS 为空集,则定义 f(S)=0f(S)=0

你的任务是求:

  • 初始集合的 f(S)f(S)
  • 以及每次操作之后的 f(S)f(S)

由于答案可能非常大,只需输出它们对 109+710^9+7 取模后的结果。

请编写程序 gcd2.cpp 完成上述任务。

输入格式

第一行两个整数 N,QN,Q,分别表示初始集合中的元素个数与操作个数。
第二行包含 NN 个整数 a1,,aNa_1,\dots,a_N
接下来 QQ 行,每行两个整数 t,xt,x

  • t=1t=1,表示将 xx 加入集合;
  • t=2t=2,表示将 xx 从集合中删除。

输出格式

输出 Q+1Q+1 行:

  • 第 1 行为初始集合的 f(S)f(S)
  • 之后每行分别为每次操作后的 f(S)f(S)

数据范围

0N,Q2×1050 \le N,Q \le 2 \times 10^5 1ai,x2×1061 \le a_i,x \le 2 \times 10^6

子任务与评分

子任务 分值 NN \le QQ \le ai,xa_i,x \le
1 5 10 2×1062 \times 10^6
2 12 2×1052 \times 10^5 0
3 13 0 3000 3000
4 12 2×1052 \times 10^5
5 28 10510^5
6 30 2×1052 \times 10^5 2×1062 \times 10^6

样例

输入

3 3
2 4 8
2 2
1 16
1 39

输出

24
16
48
94

样例说明

  • S={2,4,8}S=\{2,4,8\} 时:
$$f(S)=\gcd(\{2\})+\gcd(\{4\})+\gcd(\{8\})+\gcd(\{2,4\})+\gcd(\{2,8\})+\gcd(\{4,8\})+\gcd(\{2,4,8\})$$=2+4+8+2+2+4+2=24=2+4+8+2+2+4+2=24
  • S={4,8}S=\{4,8\} 时:
$$f(S)=\gcd(\{4\})+\gcd(\{8\})+\gcd(\{4,8\})=4+8+4=16$$
  • S={4,8,16}S=\{4,8,16\} 时:
f(S)=4+8+16+4+4+8+4=48f(S)=4+8+16+4+4+8+4=48
  • S={4,8,16,39}S=\{4,8,16,39\} 时:

所有非空子集的 gcd 之和为:

4+8+16+39+4+4+1+8+1+1+4+1+1+1+1=944+8+16+39+4+4+1+8+1+1+4+1+1+1+1=94