0
点赞
收藏
分享

微信扫一扫

USACO Guide (银组)2. 前缀和后续

IT影子 2022-02-17 阅读 21

最大子数组和,二维的前缀和,还有一个更复杂的例子。

2D 前缀和

现在,如果我们想处理 Q 查询求和的子矩形 N行M列的二维矩阵?假设行和列都是 1 索引,我们使用以下矩阵作为示例:

天真地,每个求和查询将花费 O(NM) 时间,总共O(QNM)。这太慢了。让我们以下面的示例区域为例,我们要对其求和:

手动对所有单元格求和,我们有一个子矩阵和7+11+9+6+1+3=37

第一个逻辑优化是对每一行进行一维前缀和。然后,我们将有以下行前缀和矩阵。我们所需区域中每一行的所需子阵列总和只是绿色单元格减去相应行中的红色单元格。我们对每一行都这样做以获得(28-1)+(14-4)=37

 现在,如果我们想找到一个子矩阵和,我们可以将子矩阵分解为每一行的子数组,然后将它们的和相加,这将被计算
使用前面描述的前缀和方法。由于矩阵有 N 行,
时间复杂度为 O(QN)。对于 Q=10^5 和 N=10^3,这可能足够快,但我们可以做得更好。

事实上,我们可以做二维前缀求和。在我们的二维前缀和数组中,我们有

 

举报

相关推荐

0 条评论