#A0007. 序列

序列

题目背景

线段树全家桶。

题目描述

你现在有 55 个序列 a,b,c,d,ea,b,c,d,e,长度均为 nn,初始时所有元素均为 00

你需要依次处理 qq 个操作,每个操作可能是 修改(对某个序列的某个区间进行统一变更)或 查询(询问某个序列的某个区间上的某种统计信息)。

特殊约束

  • 序列 bb 中的元素 始终只可能是 {1,0,1}\{-1,0,1\}。所有对 bb 的修改均保证不会使其超出该值域。
  • 序列 cc 中的元素按 32 位无符号整数 处理(即 0ci<2320 \le c_i < 2^{32})。

输入格式

第一行两个整数 n,qn,q

接下来 qq 行,每行描述一个操作。每行首先输入一个整数 opop,代表操作类型,随后根据 opop 的不同输入若干参数。

所有区间操作均为闭区间 [l,r][l,r],保证 1lrn1 \le l \le r \le n

所有操作中的 xx 均在对应序列的值域范围内,且对于序列 bb 的加法操作,保证结果仍属于 {1,0,1}\{-1,0,1\}

操作列表

op=1op=1 时,输入三个正整数 l,r,xl,r,x,表示将序列 aa 的区间 [l,r][l,r] 增加 xx,即 i[l,r], aiai+x\forall i\in[l,r],\ a_i \gets a_i + x

op=2op=2 时,输入三个正整数 l,r,xl,r,x,表示将序列 aa 的区间 [l,r][l,r] 乘上 xx,即 i[l,r], aiai×x\forall i\in[l,r],\ a_i \gets a_i \times x

op=3op=3 时,输入三个正整数 l,r,xl,r,x,表示让序列 aa 的区间 [l,r][l,r] 等于 xx,即 i[l,r], aix\forall i\in[l,r],\ a_i \gets x

op=4op=4 时,输入三个正整数 l,r,xl,r,x,表示将序列 aa 的区间 [l,r][l,r] 每个元素取最大值(Chmax),即 i[l,r], aimax(ai,x)\forall i\in[l,r],\ a_i \gets \max(a_i, x)

op=5op=5 时,输入三个正整数 l,r,xl,r,x,表示将序列 aa 的区间 [l,r][l,r] 每个元素取最小值(Chmin),即 i[l,r], aimin(ai,x)\forall i\in[l,r],\ a_i \gets \min(a_i, x)

op=6op=6 时,输入两个正整数 l,rl,r,表示将序列 aa 的区间 [l,r][l,r] 每个元素向下取整开方,即 $\forall i\in[l,r],\ a_i \gets \lfloor \sqrt{a_i} \rfloor$;

op=7op=7 时,输入三个正整数 l,r,xl,r,x(其中 x{1,0,1}x\in\{-1,0,1\}),表示将序列 bb 的区间 [l,r][l,r] 赋值为 xx,即 i[l,r], bix\forall i\in[l,r],\ b_i \gets x

op=8op=8 时,输入两个正整数 l,rl,r,表示将序列 bb 的区间 [l,r][l,r] 取反(乘以 1-1),即 i[l,r], bibi\forall i\in[l,r],\ b_i \gets -b_i

op=9op=9 时,输入两个正整数 l,rl,r,表示将序列 bb 的区间 [l,r][l,r] 全部乘以 00,即 i[l,r], bi0\forall i\in[l,r],\ b_i \gets 0

op=10op=10 时,输入三个正整数 l,r,xl,r,x(其中 x{1,0,1}x\in\{-1,0,1\}),表示将序列 bb 的区间 [l,r][l,r] 增加 xx,即 i[l,r], bibi+x\forall i\in[l,r],\ b_i \gets b_i + x保证操作后所有 bib_i 仍属于 {1,0,1}\{-1,0,1\}

op=11op=11 时,输入三个正整数 l,r,xl,r,x,表示将序列 cc 的区间 [l,r][l,r] 按位与上 xx,即 i[l,r], cici & x\forall i\in[l,r],\ c_i \gets c_i \ \&\ x

op=12op=12 时,输入三个正整数 l,r,xl,r,x,表示将序列 cc 的区间 [l,r][l,r] 按位或上 xx,即 i[l,r], cici  x\forall i\in[l,r],\ c_i \gets c_i \ \mid \ x

op=13op=13 时,输入两个正整数 l,rl,r,表示将序列 cc 的区间 [l,r][l,r] 按位取反(32 位无符号),即 i[l,r], cici\forall i\in[l,r],\ c_i \gets \sim c_i

op=14op=14 时,输入三个正整数 l,r,xl,r,x,表示将序列 cc 的区间 [l,r][l,r] 赋值为 xx,即 i[l,r], cix\forall i\in[l,r],\ c_i \gets x

op=15op=15 时,输入三个正整数 l,r,xl,r,x,表示将序列 dd 的区间 [l,r][l,r] 增加 xx,即 i[l,r], didi+x\forall i\in[l,r],\ d_i \gets d_i + x

op=16op=16 时,输入三个正整数 l,r,xl,r,x,表示将序列 dd 的区间 [l,r][l,r] 乘上 xx,即 i[l,r], didi×x\forall i\in[l,r],\ d_i \gets d_i \times x

op=17op=17 时,输入三个正整数 l,r,xl,r,x,表示将序列 dd 的区间 [l,r][l,r] 赋值为 xx,即 i[l,r], dix\forall i\in[l,r],\ d_i \gets x

op=18op=18 时,输入三个正整数 l,r,xl,r,x,表示将序列 ee 的区间 [l,r][l,r] 增加 xx,即 i[l,r], eiei+x\forall i\in[l,r],\ e_i \gets e_i + x

op=19op=19 时,输入三个正整数 l,r,xl,r,x,表示将序列 ee 的区间 [l,r][l,r] 乘上 xx,即 i[l,r], eiei×x\forall i\in[l,r],\ e_i \gets e_i \times x

op=20op=20 时,输入两个正整数 l,rl,r,查询序列 aa 的区间和 i=lrai\sum_{i=l}^r a_i

op=21op=21 时,输入两个正整数 l,rl,r,查询序列 aa 的区间平方和 i=lrai2\sum_{i=l}^r a_i^2

op=22op=22 时,输入两个正整数 l,rl,r,查询序列 aa 的区间最大公约数 gcd(al,al+1,,ar)\gcd(a_l, a_{l+1}, \dots, a_r)

op=23op=23 时,输入两个正整数 l,rl,r,查询序列 aa 的区间最大值 maxi=lrai\max_{i=l}^r a_i

op=24op=24 时,输入两个正整数 l,rl,r,查询序列 aa 的区间最小值 mini=lrai\min_{i=l}^r a_i

op=25op=25 时,输入两个正整数 l,rl,r,查询序列 bb 的区间 最大子段和

op=26op=26 时,输入两个正整数 l,rl,r,查询序列 bb 的区间 最小子段和

op=27op=27 时,输入两个正整数 l,rl,r,查询序列 bb 的区间 最长连续相等元素段长度,即 $\max\{\text{连续 }-1\text{ 的长度}, \text{连续 }0\text{ 的长度}, \text{连续 }1\text{ 的长度}\}$;

op=28op=28 时,输入两个正整数 l,rl,r,查询序列 cc 的区间异或和 clcl+1crc_l \oplus c_{l+1} \oplus \dots \oplus c_r

op=29op=29 时,输入两个正整数 l,rl,r,查询序列 cc 的区间按位与 cl & cl+1 &  & crc_l \ \&\ c_{l+1} \ \&\ \dots \ \&\ c_r

op=30op=30 时,输入两个正整数 l,rl,r,查询序列 cc 的区间按位或 cl  cl+1    crc_l \ \mid \ c_{l+1} \ \mid \ \dots \ \mid \ c_r

op=31op=31 时,输入两个正整数 l,rl,r,查询序列 dd 的区间和 i=lrdi\sum_{i=l}^r d_i

op=32op=32 时,输入两个正整数 l,rl,r,查询序列 ee 的区间平方和 i=lrei2\sum_{i=l}^r e_i^2

输出格式

对于每个查询操作(op[20,34]op \in [20,34]),输出一行一个整数,为对应的答案。

5 32
1 1 5 5
2 1 5 2
3 1 5 0
4 1 5 3
5 1 5 4
6 1 5
7 1 5 1
8 1 5
9 1 5
10 1 5 1
11 1 5 0
12 1 5 1
13 1 5
14 1 5 5
15 1 5 3
16 1 5 2
17 1 5 10
18 1 5 5
19 1 5 2
20 1 5
21 1 5
22 1 5
23 1 5
24 1 5
25 1 5
26 1 5
27 1 5
28 1 5
29 1 5
30 1 5
31 1 5
32 1 5
5
5
1
1
1
5
0
5
5
5
5
50
500

样例解释

经过前 1919 个修改操作后,各序列的值如下(长度为 55):

序列
aa 全为 11
bb
cc 全为 55
dd 全为 1010
ee

因此各查询的答案来源如下:

  • op=20op=20:序列 aa 的区间和 =1+1+1+1+1=5= 1+1+1+1+1 = 5
  • op=21op=21:序列 aa 的区间平方和 =12+12+12+12+12=5= 1^2+1^2+1^2+1^2+1^2 = 5
  • op=22op=22:序列 aa 的区间最大公约数 =gcd(1,1,1,1,1)=1= \gcd(1,1,1,1,1) = 1
  • op=23op=23:序列 aa 的区间最大值 =1= 1
  • op=24op=24:序列 aa 的区间最小值 =1= 1
  • op=25op=25:序列 bb 的最大子段和 =5= 5(全为 11,取整个区间);
  • op=26op=26:序列 bb 的最小子段和 =0= 0(取空子段);
  • op=27op=27:序列 bb 的最长连续相等元素段长度 =5= 5(全为 11);
  • op=28op=28:序列 cc 的区间异或和 =55555=5= 5 \oplus 5 \oplus 5 \oplus 5 \oplus 5 = 5(奇数个相同数异或为其本身);
  • op=29op=29:序列 cc 的区间按位与 =5 & 5 & 5 & 5 & 5=5= 5 \ \& \ 5 \ \& \ 5 \ \& \ 5 \ \& \ 5 = 5
  • op=30op=30:序列 cc 的区间按位或 $= 5 \ \mid \ 5 \ \mid \ 5 \ \mid \ 5 \ \mid \ 5 = 5$;
  • op=31op=31:序列 dd 的区间和 =10×5=50= 10 \times 5 = 50
  • op=32op=32:序列 ee 的区间平方和 =102×5=500= 10^2 \times 5 = 500

数据范围与约定

  • 1n,q1051 \le n,q \le 10^5
  • 所有 xx 的绝对值 109\le 10^9(对于序列 cc0x<2320 \le x < 2^{32}
  • 保证所有操作合法(序列 bb 的加法和赋值不会使其值超出 {1,0,1}\{-1,0,1\}