题目描述
琴琴有一棵二叉树,满足:
- 该树有无穷多个结点。
- 每个结点都有编号和权值。初始所有结点的权值为 0。
- 树根的编号为 1。
- 若一个结点的编号为 i,则该结点的左右儿子的编号分别是 2i,2i+1。
琴琴要对树进行共 m 次操作,每次操作是二者之一:
- 将编号为 x 的结点为根的子树中的每个结点的权值都加 v。
- 求树上编号为 x 的结点到编号为 y 的结点的路径上每个结点的权值和。答案对 232 取模。
不过琴琴不会直接给出 x,y。她再给出一个长度为 n 的 01 序列 a,每次给出 x 或 y 时给出一个区间 [lx,rx] 或 [ly,ry],这个数就是将这个区间视作二进制数的值。
输入格式
第一行两个整数 n,m。
第二行一个长度为 n 的字符串表示 a。保证字符串中只包含 0
和 1
。
下面 m 行,每行一个操作编号,然后是操作。操作的格式为:
- lx rx v
- lx rx ly ry
输出格式
对于每个操作 2,每行一个整数表示答案。
提示
样例解释
该树的前四层如图所示:

第一个操作:将以 2 为根的子树中的结点权值加上 5。
第二个操作:求 2→10 的路径上的点的权值和。
第三个操作:将以 2 为根的子树中的结点权值加上 3。
第四个操作:求 10→1 的路径上的点的权值和。
第五个操作:求 1→2 的路径上的点的权值和。
数据规模与约定
本题采用捆绑测试。
Subtask |
n≤ |
m≤ |
分值 |
1 |
10 |
103 |
5 |
2 |
20 |
105 |
3 |
104 |
20 |
4 |
4×105 |
70 |
对于 100% 的数据,1≤n,m≤4×105,1≤v≤109,1≤lx≤rx≤n,1≤ly≤ry≤n,保证 x,y=0。