#P16114. [2026年山东集训一轮]迪艾斯

[2026年山东集训一轮]迪艾斯

题目描述

小 A 有一个正整数序列 aa 和一个质数 pp。他现在想让你支持 qq 次操作,操作分为两种:

  1. 给定区间 [l,r][l,r] 和一个正整数 xx,将区间内所有 aia_i 都乘上 xx
  2. 给定区间 [l,r][l,r],问在这个区间内任选若干个 aia_i,并将它们乘起来对 pp 取模,能得到多少种不同的结果。

选择时允许重复选相同的 aia_i,也可以一个数都不选。若一个数都不选,则认为乘积为 11

输入格式

第一行三个整数 n,p,qn,p,q

第二行 nn 个整数 a1,a2,dots,ana_1,a_2,\\dots,a_n

接下来 qq 行,每行第一个整数 opop

  • op=1op=1,接下来输入三个整数 l,r,xl,r,x
  • op=2op=2,接下来输入两个整数 l,rl,r

输出格式

对于所有 op=2op=2 的操作,输出一行一个整数表示答案。

样例 1 输入

5 13 5
7 9 12 11 12
1 1 2 5
1 2 3 2
1 2 4 6
2 4 4
2 3 5

样例 1 输出

1
2

样例 1 解释

第一次操作后序列为:

[35, 45, 12, 11, 12]

第二次操作后序列为:

[35, 90, 24, 11, 12]

第三次操作后序列为:

[35, 540, 144, 66, 12]

第四次操作相当于询问只选择若干个 6666 相乘后对 p=13p=13 取模的结果数。由于

$$66^0 \equiv 66^1 \equiv 66^2 \equiv \cdots \equiv 1 \pmod {13},$$

所以只有 11 种结果,答案为 11

第五次操作中,所有选数方案得到的乘积对 p=13p=13 取模后只有 111212 两种,答案为 22

更多样例在下发文件中。

数据范围

对于全部测试点:

  • 1n,q1051\le n,q\le 10^5
  • 1x,ai<p10141\le x,a_i<p\le 10^{14}
  • 1lrn1\le l\le r\le n
  • 保证 pp 是质数;
  • 每个测试点 55 分。
测试点编号 n,qn,q\le pp\le 特殊性质
131\sim 3 400400 10510^5
464\sim 6 50005000
797\sim 9 10510^5
101110\sim 11 10910^9 保证当 op=1op=1l=rl=r
121412\sim 14
152015\sim 20 101410^{14}