U406718 llch的线段树
题目描述
有一个初始全为 $0$ 的数列,你需要进行下面两种操作:
- 将某一个数加上 $x$
- 求出某区间每一个数的和
本题强制在线,每次操作的输入要异或上次询问的答案才为真实数据。
输入格式
第一行包含两个正整数 $n,m$,表示序列长度和操作的总个数。
接下来 $m$ 行每行包含 $3$ 个整数,$op,x',y'$,表示一个操作,具体如下:
我们记 $last$ 为上一次询问的答案,初始为 $0$。
- $op$ 为 $1$ 时,记 $x=(x'\oplus last)~mod~n+1,y=(y'\oplus last)~mod~10^9$,使第 $x$ 个数加上 $y$。
- $op$ 为 $2$ 时,记 $x=(x'\oplus last)~mod~n+1,y=(y'\oplus last)~mod~n+1$,如果 $x>y$,则交换 $x,y$,输出区间 $[x,y]$ 内每个数的和。
输出格式
输出包含若干行整数,即为所有操作 $2$ 的结果。
说明/提示
【样例说明】
对于样例二解密后的操作如下:
| $op$ | $x$ | $y$ |
| :----------: | :----------: | :----------: |
| $1$ | $7$ | $678612580$ |
| $2$ | $6$ | $8$ |
| $2$ | $7$ | $2$ |
| $1$ | $7$ | $827340629$ |
| $1$ | $9$ | $800403455$ |
| $2$ | $3$ | $6$ |
| $1$ | $4$ | $816938232$ |
| $2$ | $7$ | $2$ |
| $1$ | $5$ | $97889120$ |
| $1$ | $5$ | $886841096$ |
【数据范围】
对于 $20\%$ 的数据,$1\le n,m \le 10$。
对于 $40\%$ 的数据,$1\le n,m \le 10^4$;
对于 $60\%$ 的数据,$1\le n,m \le 5\times 10^5$;
对于 $100\%$ 的数据,$1\le m \le 5\times 10^5,1\le n \le 10^{18}$。
数据保证对于任意时刻,$a$ 的任意子区间(包括长度为 $1$ 和 $n$ 的子区间)和均在 $long~long$ 范围内。