U273644 神灵之怒

题目描述

众神之王宙斯给出了一个长度为 $n$ 的数列 $A$,接下来他会要求你进行 $m$ 次操作,每次操作会给出一个正整数 $opt$,根据 $opt$ 的值你需要分别实现以下操作: 1. $opt=1$ 时,宙斯会给出三个参数 $l,r,x$,你需要将区间 $[l,r]$ 之间的所有数加上 $x$。 2. $opt=2$ 时,宙斯会给出两个参数 $l,r$,你需要翻转区间 $[l,r]$。 3. $opt=3$ 时,宙斯会给出两个参数 $l,r$,你需要给出区间 $[l,r]$ 的区间和。

输入格式

第一行一个正整数 $n$。 第二行 $n$ 个正整数,表示 $A$。 第三行一个正整数 $m$。 接下来 $m$ 行,每行 $2$ 或 $3$ 个数,形式如下: 1. ```1 l r x``` 2. ```2 l r``` 3. ```3 l r``` 意义见题目描述。

输出格式

对于每次操作 $3$,给出一个整数表示区间 $l,r$ 的区间和。对 $10^9+7$ 取模。

说明/提示

对于 $10\%$ 的数据,保证 $n,m \le 10^3$。 对于另外 $20\%$ 的数据,保证 $opt=\{1,3\}$。 对于 $100\%$ 的数据,保证输入的所有数均为整数,$1\le n,m\le 10^5$,$1 \le opt \le 3$,$1 \le l \le r \le n$,$-10^9 \le x \le 10^9$,保证任何时候 $-10^{18}\le A_i \le 10^{18}$。