QOJ.ac

QOJ

Time Limit: 15 s Memory Limit: 512 MB Total points: 100

#859. 文明

Statistics

有一款新的热门游戏正在开发中:Civilizations(不要与 Civilization 混淆)。作为团队中的高级开发人员,你的工作是编写游戏主引擎。

世界被划分为 $n$ 行 $n$ 列的单元格。第 $i$ 行第 $j$ 列的单元格最初由文明 $p_{i,j}$ 拥有(你可以假设对于 $0$ 到 $n^2 - 1$ 之间的每个整数,都有一个对应的文明。当然,在任何给定时间,许多文明可能不拥有任何单元格),并且具有值 $v_{i,j}$,这对应于与该单元格相关的宝贵资源(或财务负债)。

对于给定的文明 $p$,我们定义两个重要的度量指标:它的财富 ($w_p$) 和边界长度 ($l_p$)。文明的财富是其拥有的所有单元格的值的总和,而边界长度是满足以下条件的无序单元格对 $\{a, b\}$ 的数量:$a$ 和 $b$ 相邻,且其中恰好有一个单元格由 $p$ 拥有。

游戏引擎必须处理一系列事件;在每个事件中,由于两个文明之间的战争,其中一个单元格的所有者会发生变化。所有者的变更至少在下一次战争前是永久的。在每次事件之后,引擎应确定当前最强大的文明(仅统计拥有至少一个单元格的文明)有多强大。

游戏设计团队已经决定,文明 $p$ 的力量将计算为 $Aw_p + Bl_p + Cw_p l_p$。棘手的地方在于:随着游戏世界的发展,力量的定义会发生变化!在每次事件之后,你的引擎将获得系数 $A$、$B$ 和 $C$ 的新值。

当然,你的引擎也必须足够快——否则 Civilizations 的玩家会感到厌烦!

输入格式

输入的第一行包含测试用例的数量 $z$ ($1 \le z \le 5000$)。接下来是各测试用例的描述。

每个测试用例的第一行包含一个整数 $n$ ($2 \le n \le 500$),表示世界的大小。

接下来的 $n$ 行,每行包含 $n$ 个整数,描述单元格的值 $v_{i,j}$ ($|v_{i,j}| \le 100$)。

接下来的 $n$ 行,每行包含 $n$ 个整数,描述初始的单元格所有者 $p_{i,j}$ ($0 \le p_{i,j} < n^2$)。

下一行包含一个整数 $q$ ($1 \le q \le 10^5$),表示事件的数量。

接下来的 $q$ 行描述事件。每行包含六个整数:$i, j, p, A, B, C$ ($1 \le i, j \le n$; $0 \le p < n^2$; $|A| \le 10^{10}$; $|B| \le 10^{12}$; $|C| \le 10^4$),分别对应:发生所有者变更的单元格的行和列、新的所有者文明,以及计算文明力量的新系数。保证在事件发生前,文明 $p$ 并不拥有单元格 $(i, j)$。

所有测试用例中单元格的总数不超过 $500\,000$。 所有测试用例中查询的总数不超过 $200\,000$。

输出格式

对于每个测试用例,输出一行,包含 $q$ 个整数:每次事件后最强大文明的力量值。

样例

样例输入 1

1
2
1 2
3 4
1 1
2 2
6
2 2 1 1 -1 0
1 2 2 1 2 -1
2 1 3 0 1 -1
1 2 3 2 0 0
1 1 3 1 1 1
2 2 3 -1 -1 -1

样例输出 1

5 -7 -2 10 20 -10

说明

在第一次事件后,文明 2 仅拥有 $(2, 1)$ 单元格,而文明 1 拥有其余单元格。两个文明的边界长度均为 2,财富分别为 7 和 3。文明 1 的力量为 5,是最强大的。

在第二次事件后,文明 1 拥有对角线上的单元格,而文明 2 拥有另一条对角线上的单元格。两个文明的边界长度均为 4,财富均为 5,因此它们的力量相等,均为 -7。

在第三次事件后,棋盘上现在有三个文明:1、2 和 3。此时文明 6 是最强大的。

最后,在最后三次事件中,文明 3 接管了剩余的单元格。注意,现在对于任何 $A, B$ 和 $C$,3 都是最强大的文明,因为我们只考虑控制至少一个单元格的文明。游戏结束时文明 3 的力量为 -10,因为它拥有 0 的边界长度和 10 的财富。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#185EditorialOpen题解jiangly2025-12-12 23:58:36View

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.