CF2022E2.Billetes MX (Hard Version)

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是该问题的困难版本。在本版本中,保证 q≤105q \leq 10^5。只有在你解决了两个版本的问题后,才能进行 hack。

一个有 pp 行 qq 列的整数网格 AA 被称为美丽的,如果:

  • 网格中的所有元素都是 00 到 230−12^{30}-1 之间的整数,并且
  • 对于任意子矩阵,其四个角的值的异或和等于 00。形式化地说,对于任意四个整数 i1i_1、i2i_2、j1j_1、j2j_2(1≤i1<i2≤p1 \le i_1 < i_2 \le p;1≤j1<j2≤q1 \le j_1 < j_2 \le q),都有 Ai1,j1⊕Ai1,j2⊕Ai2,j1⊕Ai2,j2=0A_{i_1, j_1} \oplus A_{i_1, j_2} \oplus A_{i_2, j_1} \oplus A_{i_2, j_2} = 0,其中 ⊕\oplus 表示按位异或运算。

现在有一个部分填充的整数网格 GG,它有 nn 行 mm 列,其中只有 kk 个格子被填充。Polycarp 想知道有多少种方法可以给未填充的格子赋值,使得整个网格是美丽的。

然而,Monocarp 认为这个问题太简单了。因此,他会对网格进行 qq 次更新。每次更新,他会选择一个未填充的格子并赋予一个整数。注意,这些更新是持久化的,也就是说,对网格的更改会影响后续的所有更新。

对于每个网格的状态(初始状态以及每次 qq 次更新后的状态),请你计算 Polycarp 可以给未填充格子赋值,使网格美丽的方案数。由于答案可能非常大,你只需要输出其对 109+710^9+7 取模的结果。

输入格式

第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4)——表示测试用例的数量。

每个测试用例的第一行包含四个整数 nn、mm、kk 和 qq(2≤n,m≤1052 \le n, m \le 10^5;0≤k,q≤1050 \le k, q \leq 10^5)——表示行数、列数、已填充格子的数量和更新次数。

接下来的 kk 行,每行包含三个整数 rr、cc 和 vv(1≤r≤n,1≤c≤m1 \le r \le n, 1 \le c \le m;0≤v<2300 \le v < 2^{30}),表示 Gr,cG_{r, c} 被赋值为 vv。

接下来的 qq 行,每行包含三个整数 rr、cc 和 vv(1≤r≤n,1≤c≤m1 \le r \le n, 1 \le c \le m;0≤v<2300 \le v < 2^{30}),表示 Gr,cG_{r, c} 被赋值为 vv。

保证所有赋值的 (r,c)(r, c) 坐标都是不同的。

保证所有测试用例中 nn、mm、kk 和 qq 的总和分别不超过 10510^5。

输出格式

对于每个测试用例,输出 q+1q+1 行。第 ii 行输出第 ii 个网格状态下的答案,对 109+710^9+7 取模。

输入输出样例

  • 输入#1

    3
    3 3 8 1
    2 1 6
    3 2 12
    1 2 6
    2 2 0
    1 3 10
    1 1 0
    2 3 12
    3 1 10
    3 3 1
    2 5 2 0
    1 1 10
    1 2 30
    2 5 0 2
    1 1 10
    1 2 30

    输出#1

    1
    0
    489373567
    651321892
    769740174
    489373567

说明/提示

在示例的第一个测试用例中,初始网格如下:

00 66 1010 66 00 1212 1010 1212 ??

可以证明,格子 (3,3)(3, 3) 的唯一合法取值是 00,因此第一个答案是 11。对于第二个查询,网格不再满足条件,因此答案是 00。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页