#P7982. [JRKSJ R3] 琴琴的树

    ID: 7058 远端评测题 1500ms 80MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>树状数组2021洛谷原创cdq 分治后缀自动机,SAMO2优化RMQ后缀数组,SA

[JRKSJ R3] 琴琴的树

题目描述

琴琴有一棵二叉树,满足:

  • 该树有无穷多个结点。
  • 每个结点都有编号和权值。初始所有结点的权值为 00
  • 树根的编号为 11
  • 若一个结点的编号为 ii,则该结点的左右儿子的编号分别是 2i,2i+12i,2i+1

琴琴要对树进行共 mm 次操作,每次操作是二者之一:

  1. 将编号为 xx 的结点为根的子树中的每个结点的权值都加 vv
  2. 求树上编号为 xx 的结点到编号为 yy 的结点的路径上每个结点的权值和。答案对 2322^{32} 取模。

不过琴琴不会直接给出 x,yx,y。她再给出一个长度为 nn0101 序列 aa,每次给出 xxyy 时给出一个区间 [lx,rx][l_x,r_x][ly,ry][l_y,r_y],这个数就是将这个区间视作二进制数的值。

输入格式

第一行两个整数 n,mn,m
第二行一个长度为 nn 的字符串表示 aa。保证字符串中只包含 01
下面 mm 行,每行一个操作编号,然后是操作。操作的格式为:

  1.  lx rx v\ l_x\ r_x\ v
  2.  lx rx ly ry\ l_x\ r_x\ l_y\ r_y

输出格式

对于每个操作 22,每行一个整数表示答案。

5 5
01010
1 4 5 5
2 1 3 2 5
1 2 3 3
2 1 5 1 2
2 3 4 4 5
15
24
8

提示

样例解释

该树的前四层如图所示:

第一个操作:将以 22 为根的子树中的结点权值加上 55
第二个操作:求 2102\rightarrow 10 的路径上的点的权值和。
第三个操作:将以 22 为根的子树中的结点权值加上 33
第四个操作:求 10110\rightarrow 1 的路径上的点的权值和。
第五个操作:求 121\rightarrow 2 的路径上的点的权值和。

数据规模与约定

本题采用捆绑测试。

Subtask\text{Subtask} nn\le mm\le 分值
11 1010 10310^3 55
22 2020 10510^5
33 10410^4 2020
44 4×1054\times 10^5 7070

对于 100%100\% 的数据,1n,m4×1051\le n,m\le 4\times 10^51v1091\le v \le 10^91lxrxn1\le l_x\le r_x\le n1lyryn1\le l_y\le r_y\le n,保证 x,y0x,y\ne 0