#P5350. 序列

序列

题目背景

搬运序列

题目描述

有一个序列ana_n和若干操作。

  • 1 l r \mathrm{1\ l \ r \ } 求ala_l到ara_r的和
  • 2 l r val \mathrm{2\ l \ r \ val \ } 将ala_l到ara_r赋值为val\mathrm{val}
  • 3 l r val \mathrm{3\ l \ r \ val\ }将ala_l到ara_r加上val\mathrm{val}
  • 4 l1 r1 l2 r2\mathrm{4\ l_1 \ r_1 \ l_2 \ r_2 }将al1a_{l_1}到ar1a_{r_1}复制到al2a_{l_2}到ar2a_{r_2}处
  • 5 l1 r1 l2 r2\mathrm{5\ l_1 \ r_1 \ l_2 \ r_2 }将al1a_{l_1}到ar1a_{r_1}与al2a_{l_2}到ar2a_{r_2}交换
  • 6 l r \mathrm{6\ l \ r \ }将ala_l到ara_r翻转

输入格式

第一行两个数nn和mm,为序列长度和操作个数。

第二行nn个数,为aia_i。

下面mm行,每行为操作种类和相应的若干整数。

输出格式

若干行,对于每个11操作,输出答案。

由于答案可能过大,对109+710^9+7取模。

最后一行输出序列ana_n。当然也要取模。

10 10
7 1 3 2 2 4 0 1 2 2 
4 10 10 3 3
3 4 10 5
6 6 7
6 9 10
1 10 10
5 9 10 6 7
2 8 10 0
5 4 4 5 5
5 2 4 8 10
3 3 9 0
7
7 0 0 0 7 7 7 1 2 7

提示

请注意常数优化

若是copy\mathrm{copy}和swap\mathrm{swap}操作,保证r1−l1=r2−l2r_1-l_1=r_2-l_2且区间不重叠。

保证数据随机。

对于30%30\%的数据,保证 n,m≤103 \ n,m\le 10^3\ 。

对于50%50\%的数据,保证 n,m≤5×104 \ n,m\le 5\times 10^4\ 。

对于70%70\%的数据,保证 n,m≤1.5×105 \ n,m\le 1.5\times 10^5\ 。

对于100%100\%的数据,保证$\ n,m\le 3\times 10^5\ ,\ 0\le a_i,\mathrm{val}\lt Mod\$。