A93027.「SDOI / SXOI2022」无处存储
NOI/NOI+/CTSC
通过率:0%
时间限制:4.00s
内存限制:64MB
题目描述
小 Ω 想出一个数据结构题,于是它先造了一棵点有点权的树:
给定一棵大小为 n 的树,编号 1 到 n,第 i∈[2,n] 个点的父节点记作 fi∈[1,i−1]。另外,每个点 i 有一个点权 ai,初始点权由输入确定,具体方式见输入格式。
在数据结构题里面,需要有对应的修改和查询的操作,而树上最简单的两种非平凡操作当然是链加、链求和了。
因此你需要支持以下两种操作:
0 x y v:将树上从 x 到 y 的简单路径上的点的权值增加 v;
1 x y:求树上从 x 到 y 的简单路径上的点的权值和;
出完之后小 Ω 拿给小 N 看,小 N 表示:
……这也太简单了,这不是轻重链剖分模板题吗?!!
小 Ω 于是想到在刚刚接触 OI 的时候了解到的时间换空间的原理,因此他决定本题的空间限制为 64 MB。
输入格式
第一行输入三个正整数 id,n,q,其中 id 为子任务编号,和四个非负整数 A,B,C,a0。
A,B,C,a0 用于生成点权 a1,a2,…,an,具体方法是按照下式进行递推:
ai=(Aai−12+Bai−1+C)mod232
接下来一行 n−1 个正整数表示 f2,…,fn。
接下来 q 行,每行若干整数,形如 0 x y v 或者 1 x y,表示一次修改或查询。
其中 x′,y′,v′ 用于强制在线,实际操作的 x=x′xorP,y=y′xorP,v=v′xorP,其中 xor 是 C/C++ 中的按位异或运算符 ^,P=lastans &(220−1),其中 lastans 为上一次询问的答案(没有上次询问则记为 0),& 为 C/C++ 中的按位与运算符 &。
输出格式
若干行,依次输出每个询问的答案对 232 取模后的结果。
输入输出样例
输入#1
0 10 10 935995202 406705156 7034169 418665824 1 1 1 1 1 1 1 7 2 0 10 3 781084039 1 7 5 0 897574 897583 833116301 1 897583 897572 0 886189 886179 123805569 1 886182 886190 1 145142 145136 1 854537 854538 1 896515 896525 0 879409 879412 746499584
输出#1
2925376046 3681387943 4240586487 2878147072 2350755335 731736886