class NgLib:: DynamicRectangleSum(T)

Overview

変更されうる二次元配列 $A$ に対して、累積和 $\sum_{i=l_i}^{r_i-1} \sum_{j=l_j}^{r_j-1} A_i$ を計算します。

Defined in:

nglib/data_structure/dynamic_rectangle_sum.cr

Constructors

Instance Method Summary

Constructor Detail

def self. new (h : Int , w : Int ) #

[ View source ]
def self. new (grid : Array(Array(T))) #

[ View source ]

Instance Method Detail

def [] (y_range : Range( Int | Nil, Int | Nil), x_range : Range( Int | Nil, Int | Nil)) : T #

[ View source ]
def []= (i : Int , j : Int , val : T) #

[ View source ]
def []? (y_range : Range( Int | Nil, Int | Nil), x_range : Range( Int | Nil, Int | Nil)) : T | Nil #

[ View source ]
def add (y : Int , x : Int , val : T) : T #

(y, x) の要素に val を足します。

添字は 0-index です。

csum = DynamicRectangleSum.new(a)
csum.add(y, x, val) # => val

[ View source ]
def add? (y : Int , x : Int , val : T) : Bool #

(y, x) の要素に val を足します。

添字は 0-index です。

加算に成功した場合 true を返します。

csum = DynamicRectangleSum.new(a)
csum.add?(y, x, x) # => true

[ View source ]
def csum : Array(Array(T)) #

[ View source ]
def get (y_begin : Int , y_end : Int , x_begin : Int , x_end : Int ) : T #

累積和を返します。

[y_begin, y_end), [x_begin, x_end) で指定します。

NOTE このAPIは非推奨です。Rangeで指定することが推奨されます。


[ View source ]
def get (y_range : Range( Int | Nil, Int | Nil), x_range : Range( Int | Nil, Int | Nil)) : T #

累積和を取得します。

Range(y_begin, y_end), Range(x_begin, x_end) で指定します。

csum = DynamicRectangleSum.new(a)
csum.get(0...h, j..j + 2) # => 28

[ View source ]
def get? (y_begin : Int , y_end : Int , x_begin : Int , x_end : Int ) : T | Nil #

累積和を返します。

[y_begin, y_end), [x_begin, x_end) で指定します。

範囲内に要素が存在しない場合 nil を返します。

NOTE このAPIは非推奨です。Rangeで指定することが推奨されます。


[ View source ]
def get? (y_range : Range( Int | Nil, Int | Nil), x_range : Range( Int | Nil, Int | Nil)) : T | Nil #

累積和を返します。

[y_begin, y_end), [x_begin, x_end) で指定します。

範囲内に要素が存在しない場合 nil を返します。

csum = DynamicRectangleSum.new(a)
csum.get?(0...h, j..j + 2)     # => 28
csum.get?(0...100*h, j..j + 2) # => nil

[ View source ]
def height : Int32 #

[ View source ]
def width : Int32 #

[ View source ]