SP20849 IQUERY - Interesting queries
题目描述
NIT Durgapur 计算机科学系的学生因为课程繁重而感到无聊和疲惫。临近期末考试,大家都在努力准备,以期在即将到来的算法考试中取得好成绩。为了给他们制造一些挑战,考试中出现了一道令人意外的题目。题目看似简单,但要求尽可能优化代码。
现在,轮到你来解决这个问题了。初始时,有一个包含 $N$ 个非负整数的数组(采用从 1 开始的索引),并需要根据这个数组处理 $Q$ 个查询。在每次查询中,可以执行以下三种操作之一:计算某一范围内所有子集乘积的和;计算某一范围内所有子集按位与的和;或者更新数组中的一个元素。所有的计算结果都需要对 $(10^9 + 7)$ 取模。如果查询类型为 'M',则计算乘积和;如果是 'A',则计算按位与和;如果是 'U',则进行更新操作。详情请参阅示例部分。
**注意**:在 C、C++ 以及大多数编程语言中,按位与运算符为 `&`。使用其他语言时,请查阅相关文档。
输入格式
第一行是一个整数 $N$,表示数组的元素数量。第二行包含 $N$ 个整数,表示数组中的具体元素。然后是一个整数 $Q$,表示有多少次查询。随后的每行描述一次查询:如果是 'M',则表示计算乘积的和;如果是 'A',则表示计算按位与的和;如果是 'U',则表示更新元素。如果查询为 'M' 或 'A',后面会有两个整数 $i$ 和 $j$,指定数组的范围。如果是 'U',后面会有两个整数,分别表示位置和要更新的新值。
输出格式
对每个 'M' 和 'A' 类型的查询,输出计算结果。对于 'U' 类型的查询,则不需要输出内容。
说明/提示
- $1 \leq N \leq 5$
- $1 \leq Q \leq 5$
- $1 \leq i \leq j \leq N$
- 要更新的元素的最大值为 $10^5$
**样例输入**
```
3
1 2 3
5
M 1 3
A 1 3
U 2 5
M 1 3
A 1 3
```
**样例输出**
```
23
9
47
13
```
**解释**
- 第一次查询是计算乘积的和:$1 + 2 + 3 + 1 \times 2 + 1 \times 3 + 2 \times 3 + 1 \times 2 \times 3 = 23$。
- 第二次查询是计算按位与的和:$1 + 2 + 3 + 1\&2 + 1\&3 + 2\&3 + 1\&2\&3 = 9$。
- 第三次查询是更新操作,数组变为 $1, 5, 3$。
- 第四次查询是计算新数组中乘积的和:$1 + 5 + 3 + 1 \times 5 + 1 \times 3 + 3 \times 5 + 1 \times 3 \times 5 = 47$。
- 第五次查询是计算新数组中按位与的和:$1 + 5 + 3 + 1\&5 + 1\&3 + 3\&5 + 1\&3\&5 = 13$。
**本翻译由 AI 自动生成**