c++ - 我们如何找到给定子矩阵中不同元素的数量?

标签 c++ c algorithm segment-tree

给定一个 N*N 矩阵,并对同一给定矩阵进行 Q 次查询。每个查询的形式为 x1,y1,x2,y2。我们必须找到分别由 (x1,y1) 和 (x2,y2) 定义为左上角和右下角的子矩阵中不同元素的数量。 约束:N<=300 Q<=10^5 我使用简单的方法迭代每个查询的子矩阵。有没有更好的方法?

最佳答案

这取决于您可以预期的查询数量,以及您可以预期的相同查询的数量。

一种方法是“内存”查询,简单地存储每个查询和结果,并在进行更认真的工作之前进行查找。

一种更针对特定问题的方法(可能是您的老师所追求的)是为每个 (right,bottom)=(x,y) 计算 (0, 0, x, y) 的不同元素。然后用简单的集合论来处理每个查询。但进行原始计算非常耗时。

请记住添加对此答案的引用。

关于c++ - 我们如何找到给定子矩阵中不同元素的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20487406/

相关文章:

c++ - 如何制作一个数组,其中的每个数字都存储一个字符串,就像 const char * argv[ ] 那样?

对于 c 中的给定代码,无法将节点**转换为节点**错误

c - C 中的运行时错误 (CodeChef)

algorithm - 我应该如何在 3D 场景中指定矩形?

python - 根据树关系创建嵌套列表

C++如何读取文本文件并反转行以便从下到上读取

c++ - 从文本文件中排序数据

c++ - 当返回 undefined object 类型引用的 C++ 函数的返回值未赋值时会发生什么?

ios - 如何将 xcode 中导入的 .db 文件直接移动到 iPhone

algorithm - C# 中的 ISO 9797-1 算法 1 [CBC-MAC]