- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有 N 个点,用 (xi,yi) 表示。
1<=i<=N
我有以下形式的 Q 查询:
给定一个由点 x1, y1, x2, y2 定义的矩形(与 x,y 轴对齐),其中 (x1, y1) 是左下角,(x2, y2) 是右上角,找到矩形内的点数。矩形上的点被认为在外面。
Constraints :
1 ≤ N ≤ 100 000
1 ≤ Q ≤ 100 000
0 ≤ xi, yi ≤ 100 000
0 ≤ x1 < x2 ≤ 100 000
0 ≤ y1 < y2 ≤ 100 000
我想到了以下方法:
在 N*N 矩阵上构建二维线段树。一个查询将在 log N 时间内得到解决。但是构建的线段树的大小会>=10^7。因此内存不足。
保留两个数组(比如 X 和 Y),两个数组都包含所有 N 个点。X 根据 x 坐标排序,Y 根据 y 坐标排序。现在给定 x1,y1,x2,y2:我可以在 log N 时间内从 X 数组中找到所有 >=x1 && <=x2 的点。同样,我可以在 log N 时间内从 Y 中找到所有 >=y1 && <=y2 的点。但是如何找到给定矩形中的点数,我无法进一步研究!
复杂度应为 O(NlogN) 或 O(QlogN)
最佳答案
这个问题叫做正交范围搜索:
Given a set of n points in Rd, preprocess them such that reporting or counting the k points inside a d-dimensional axis-parallel box will be most efficient.
您的查询是范围计数查询(不是范围报告查询)。
二维范围树可用于使用 O(n log n) 存储在 O(log n) 时间内回答范围计数查询(参见示例 Ch.36 of Handbook of Discrete and Computational Geometry 2Ed, 2004)
如果您的 x 和 y 在网格上,并且网格很窄,请参阅 Orthogonal range searching in linear and almost-linear space [Nekrich, 2009]其中提供了 O((logn/log logn)2) 时间数据结构。
关于arrays - 矩形中的点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39434544/
我有一个问题需要分而治之解决。有一个包含 N 个点的集合 S。如果有一个平行于轴的正方形,只包含S中的两个点p1和p2,则我们称p1和p2为 friend 点。 现在,我需要使用分而治之算法来计算 S
为 iPad 编程时,字体(和其他)大小以“磅”为单位指定。我已经看到将点作为独立于屏幕分辨率的像素的引用。但是我无法确定一个点的实际大小(即以英寸为单位)。一个点是否等于标准 iPad 屏幕上的一个
我有一个来自 Hadley Wickham 的 ggplot2 书中的问题。 我在这里有这个数据框: class % group_by(class) %>% summarise(n = n
好的,这是一些代码( pdfDocument 是 com.itextpdf.text.Document ): PdfPTable table = new PdfPTable(1); PdfPCell
我正在尝试添加一个 if 语句,如果小于 17,则将另一张牌添加到 DealerHand 中。 目前,它只是记录: 7 19 [ { suit: '♦', value: 9, points: 9 },
我正在编写一个程序,我需要: 对图像的每个像素进行测试 如果测试结果为真,我必须向点云中添加一个点 如果测试结果为假,什么都不做 我已经在 CPU 端 C++ 上编写了一个工作代码。现在我需要使用 C
我是一名优秀的程序员,十分优秀!