#c22704. 二维差分

二维差分

二维差分

题目描述

给一个 n×mn\times m 的矩阵 $a_{1, 1}, a_{1, 2}, \dots, a_{1, m}, \dots, a_{n, m}$ 和 qq 个修改操作。

一开始所有位置都是 00,每次修改给出五个数 x1,y1,x2,y2,dx_1, y_1, x_2, y_2, d,令所有 ai,j(x1≤i≤x2,y1≤j≤y2)a_{i, j} (x_1\leq i\leq x_2, y_1\leq j\leq y_2) 加上 dd。

求出所有操作结束之后,整个矩阵的值。

输入格式

第一行六个整数 $n, m ,q, A, B, C(1\leq n, m\leq 2\times 10^3, 1 \le q\leq 10^6, 0\leq A, B, C < 2^{32})$。

为了防止输入过大,询问用下面代码生成。

int n, m, q;
unsigned int A, B, C;
unsigned int a[N][N];
inline unsigned int rng61() {
    A ^= A << 16;
    A ^= A >> 5;
    A ^= A << 1;
    unsigned int t = A;
    A = B;
    B = C;
    C ^= t ^ A;
    return C;
}
int main(){
    scanf("%d%d%d%u%u%u", &n, &m, &q, &A, &B, &C);
    for (int i = 1; i <= q; i++) {
        int x1 = rng61() % n + 1, x2 = rng61() % n + 1;
        int y1 = rng61() % m + 1, y2 = rng61() % m + 1;
        unsigned int d = rng61();
        if (x1 > x2) swap(x1, x2);
        if (y1 > y2) swap(y1, y2);
        // 执行修改操作
    }
}

输出格式

为了防止输出过大,输出操作完之后矩阵中所有数的异或和。

样例输入

5 5 10 1 2 3

样例输出

3809069637