U605743 SegmentTree

题目背景

HDU4578加强版(QwQ 不会写题面)。

题目描述

Zxm 被下面这道题难住了: 有 $n$ 个整数 $a_1, a_2, ..., a_n$。现有四种操作: 操作1:将下标在 $[x,y]$ 的每个数都加上 $c$。 操作2:将下标在 $[x,y]$ 的每个数都乘上 $c$。 操作3:将下标在 $[x,y]$ 的每个数都变为 $c$。 操作4:将下标在 $[x,y]$ 的每个数 $p$ 次方之和。即计算 $a_x^p+a_{x+1}^p+...+a_y^p$。 Zxm 毫无头绪,于是想请你帮忙解决这个问题。

输入格式

测试用例不超过 $10$ 组。 每组数据第一行包含两个整数 $n$ 和 $m$,表示有 $n$ 个整数和 $m$ 次操作($1 \le n, m \le 100,000$)。 接下来一行描述原数列 $a_1, a_2, ..., a_n$。 随后 $m$ 行每行描述一个操作: 操作1至3的格式为:`1 x y c` 或 `2 x y c` 或 `3 x y c`; 操作4的格式为:`4 x y p` (其中 $1 \le x \le y \le n,1 \le c \le 10,000,1 \le p \le 10$)。 输入以 `0 0` 结束。

输出格式

对于每个操作4,输出一行整数表示结果。由于答案可能很大,只需输出其对 $10^9+7$ 取模的结果。