class NgLib:: SparseTable(T)

Overview

不変な数列 A について、以下の条件を満たす演算を、区間クエリとして処理します。

前計算は O(NlogN) かかりますが、区間クエリには O(1) で答えられます。

Defined in:

nglib/data_structure/sparse_table.cr

Constructors

Class Method Summary

Instance Method Summary

Constructor Detail

def self. new (elems : Enumerable(T), op : T, T -> T) #

=op としてデータ構造を構築します。


[ View source ]

Class Method Detail

def self. bitwise_and (elems : Enumerable(T)) #

=bitwiseand としてデータ構造を構築します。


[ View source ]
def self. bitwise_or (elems : Enumerable(T)) #

=bitwiseor としてデータ構造を構築します。


[ View source ]
def self. gcd (elems : Enumerable(T)) #

=gcd としてデータ構造を構築します。


[ View source ]
def self. max (elems : Enumerable(T)) #

=max としてデータ構造を構築します。


[ View source ]
def self. min (elems : Enumerable(T)) #

=min としてデータ構造を構築します。


[ View source ]

Instance Method Detail

def [] (range : Range( Int | Nil, Int | Nil)) #

#prod へのエイリアスです。


[ View source ]
def [] (i) #

ai を返します。


[ View source ]
def []? (range : Range( Int | Nil, Int | Nil)) #

#prod? へのエイリアスです。


[ View source ]
def []? (i) #

ai を返します。

添字が範囲外のとき、 nil を返します。


[ View source ]
def prod (range : Range( Int | Nil, Int | Nil)) #

range の表す範囲の要素の総積 irangeai を返します。

rmq = SparseTable(Int32).min([2, 7, 1, 8, 1])
rmq.prod(0...3) # => 1

[ View source ]
def prod? (range : Range( Int | Nil, Int | Nil)) #

range の表す範囲の要素の総積 irangeai を返します。

0lrn を満たさないとき、 nil を返します。

rmq = SparseTable(Int32).min([2, 7, 1, 8, 1])
rmq.prod(0...3) # => 1

[ View source ]
def size : Int32 #

[ View source ]