QOJ.ac

QOJ

时间限制: 12.0 s 内存限制: 1024 MB 总分: 100 可 Hack ✓

#7022. 最强 ACMer 解决最难的问题

统计

有一天,一位优秀的 ACMer 将离开赛场去迎接新的挑战,就像他的前辈们所做的那样。他们中的一些人接手了家族企业,一些人正在为失业的边缘而挣扎。他们中的一些人有勇气展示自己,成为一名职业 Ingress 玩家,还有一些人仍在挑战极限,试图解决 Project Euler 中的所有问题。

但对于前任王者 Benecol de Cecco 来说,这些目标都太肤浅了。他现在所做的是成为 StackOverflow 上最优秀的回答者。StackOverflow 是开发者学习、分享编程知识并建立职业生涯的最大、最受信任的在线社区。

今天,他注意到 Kevin Li 发布的一个问题,上面写着:最近,我进行了一项实验,需要找到所有与查询点 $q$ 的欧几里得距离为相同值 $r$ 的数据记录。我尝试使用 k-d 树来提高搜索效率。然而,我发现 k-d 树需要遍历所有叶子节点才能返回结果,也就是说,它仍然需要比较整个数据集才能得到结果。

这个问题可以形式化为构建一个支持实时查询和修改的数据库。起初,假设我们在平面上有 $n$ 个不同的点。第 $i$ 个点位于 $(x_i, y_i)$,权重为 $w_i$。然后我们考虑动态给出的几种查询和修改:

  • 1 x y w,插入一个权重为 $w$ 的新点 $(x, y)$,保证操作前该位置没有点;
  • 2 x y,删除位于 $(x, y)$ 的点,保证操作前该点存在;
  • 3 x y k w,对于所有到 $(x, y)$ 的欧几里得距离为 $\sqrt{k}$ 的点,将其权重增加 $w$;
  • 4 x y k,查询所有到 $(x, y)$ 的欧几里得距离为 $\sqrt{k}$ 的点的权重之和。

Benecol de Cecco 说这个问题很简单,他让我把它分享给大家。顺便提一下,两点 $(x_0, y_0)$ 和 $(x_1, y_1)$ 之间的欧几里得距离等于 $\sqrt{(x_0 - x_1)^2 + (y_0 - y_1)^2}$。

输入格式

输入包含多个测试用例,第一行包含一个正整数 $T$,表示测试用例的数量,最多为 $1000$。

对于每个测试用例,第一行包含两个整数 $n$ 和 $m$,分别表示平面上的初始点数和操作次数,其中 $1 \le n, m \le 10^5$。

接下来的 $n$ 行,每行包含三个整数 $x, y$ 和 $w$,满足 $1 \le x, y, w \le 6000$,描述了初始时在 $(x, y)$ 处的一个权重为 $w$ 的点。

接下来的 $m$ 行,每行包含一个操作,可以是查询或修改。这些操作以如上所述的形式给出。为了使操作中的所有 $x$ 和 $y$ 动态化,我们使用 $lastans$ 表示最近一次查询的答案,其初始值为零。对于输入中带有 $x$ 和 $y$ 值的每个操作,它们的实际值应分别为 $(((x + lastans) \pmod{6000}) + 1)$ 和 $(((y + lastans) \pmod{6000}) + 1)$。操作中的所有系数均为整数,且满足 $0 \le k \le 10^7$ 以及 $1 \le x, y, w \le 6000$。

我们保证所有测试用例中 $n$ 的总和与 $m$ 的总和分别不超过 $10^6$。

输出格式

对于每个测试用例,首先输出一行包含 “Case #x:”(不含引号),其中 $x$ 是从 1 开始的测试用例编号。

然后对于每个查询,输出一行一个整数,表示答案。

样例

输入 1

1
3 6
2999 3000 1
3001 3000 1
3000 2999 1
1 2999 3000 1
4 2999 2999 1
2 2995 2996
3 2995 2995 1 1
4 2995 2995 1
4 3000 3000 1

输出 1

Case #1:
4
6
0

说明

在样例中,如果我们忽略操作中动态 $x$ 和 $y$ 的特殊输入格式,我们可以将这些修改和查询直接以离线格式展示如下:

  • 1 3000 3001 1;
  • 4 3000 3000 1;
  • 2 3000 3001;
  • 3 3000 3000 1 1;
  • 4 3000 3000 1;
  • 4 3007 3007 1.

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.