#P10890. 【烂题杯 Round 1】可持久化糖果树

【烂题杯 Round 1】可持久化糖果树

题目描述

本题数据生成器经过修改,部分题解里的代码将无法通过,并非题解出现错误!

小 A 有一棵糖果树,树上有 nn 个节点,编号为 1,2,,n1,2,\cdots,n。每个节点里有 mm 位小朋友,编号为 1,2,,m1,2,\cdots,m。每个小朋友可以进行 kk 次祈愿,编号为 1,2,,k1,2,\cdots,k。节点 ii 中的第 jj 位小朋友的第 xx 次祈愿可以获得 ai,j,xa_{i,j,x} 个糖果。我们称未被修改的糖果树为第 00 个版本树。

一个小朋友被称为开心的,当且仅当她经过 kk 轮祈愿后可以获得的糖果数量可以被 33 整除,这样就可以把糖果平均地分给她和她的父母。也就是说,第 ii 个节点的第 jj 个小朋友是开心的当且仅当 x=1kai,j,xmod3=0\sum_{x=1}^k a_{i,j,x}\bmod 3=0

一个节点被称为是快乐的,当且仅当上面的 mm 位小朋友都是开心的。

小 A 可以施加魔法:他将会有 qq 次修改,下标从 11 开始的第 ii 次修改可以描述为 (x,y,z)(x,y,z),表示将第 xx 个版本树上所有节点中的所有小朋友的第 yy 次祈愿获得的糖果数量乘上 zz,得到第 ii 个版本树。要求你求出每个版本树中有多少个点是快乐的。

输入格式

由于输入文件过大无法上传,接下来我们将会以一种诡异的方式读入数据。

第一行有 44 个整数 nnmmkkXX,分别表示节点个数、每个节点上的小朋友个数、每个小朋友的祈愿次数、随机种子。

那么 $a_{i,j,x}=(X+X\times i+(X\oplus (j\times x+i\times i))\bmod 10^9$。

对于 C++,代码实现如下:

a[i][j][x] = (X + 1ll * X * i + (X ^ (1ll * j * x + 1ll * i * i))) % 1000000000;

接下来一行一个正整数 qq,表示修改次数。

对于下标从 11 开始的第 ii 次修改,x=(Xi)modix=(X\oplus i)\bmod iy=(Xi)modk+1y=(X\oplus i)\bmod k+1z=(X+(Xi))mod(1091)z=(X+(X\oplus i))\bmod (10^9-1),表示将第 xx 个版本树上所有节点中的所有小朋友的第 yy 次祈愿获得的糖果数量乘上 zz,得到第 ii 个版本树。

对于 C++,代码实现如下:

x = (X ^ i) % i, y = (X ^ i) % k + 1, z = (X + (X ^ i)) % 999999999;

输出格式

由于输出文件过大无法上传,接下来我们将会以一种诡异的方式输出数据。

输出一行,表示第 0q0\sim q 个版本树中快乐的节点数的异或和。

2 2 3 0
5
2
100 4 12 1919810
100
16

提示

样例 1 解释:

a1,1,1=2a_{1,1,1}=2a1,1,2=3a_{1,1,2}=3a1,1,3=4a_{1,1,3}=4a1,2,1=3a_{1,2,1}=3a1,2,2=5a_{1,2,2}=5a1,2,3=7a_{1,2,3}=7a2,1,1=5a_{2,1,1}=5a2,1,2=6a_{2,1,2}=6a2,1,3=7a_{2,1,3}=7a2,2,1=6a_{2,2,1}=6a2,2,2=8a_{2,2,2}=8a2,2,3=10a_{2,2,3}=10

对修改解密后为:

0 2 1
0 3 2
0 1 3
0 2 4
0 3 5

对输出解密后为:

2
2
2
0
2
2

数据范围:

对于 20%20\% 的数据,满足 n103n\le 10^3q103q\le 10^3

对于 40%40\% 的数据,满足 n103n\le 10^3q106q\le 10^6

对于另外 10%10\% 的数据,满足 m=1m=1

对于另外 10%10\% 的数据,满足 k=1k=1

对于另外 5%5\% 的数据,满足 q=0q=0

对于 100%100\% 的数据,满足 1n1051\le n\le 10^51m41\le m\le 41k121\le k\le 120q1060\le q\le 10^60ai,j,x<1090\le a_{i,j,x}< 10^9。对于第 ii 次修改,0x<i0\le x<i1yk1\le y\le k0z<10910\le z<10^9-10X1090\le X\le 10^9