src/cplib/collections/range_reverse_array_monoid

    Dark Mode
Search:
Group by:
  Source   Edit

Types

RangeReverseArrayMonoid[T] = ref object
  root: RangeReverseArrayMonoidNode[T]
  length: int
  op: proc (x, y: T): T
  e: T
  Source   Edit

Procs

proc `$`[T](self: RangeReverseArrayMonoid[T]): string
  Source   Edit
proc `[]=`[T](self: RangeReverseArrayMonoid[T]; index: Natural; value: T)
  Source   Edit
proc `[]`[T](self: RangeReverseArrayMonoid[T]; index: BackwardsIndex): T
  Source   Edit
proc `[]`[T](self: RangeReverseArrayMonoid[T]; index: int): T
  Source   Edit
proc `[]`[T](self: RangeReverseArrayMonoid[T]; segment: HSlice[int, int]): T
  Source   Edit
proc erase[T](self: RangeReverseArrayMonoid[T]; index: int)
  Source   Edit
proc erase[T](self: RangeReverseArrayMonoid[T]; l, r: int)
  Source   Edit
proc erase[T](self: RangeReverseArrayMonoid[T]; segment: HSlice[int, int])
  Source   Edit
proc fold[T](self: RangeReverseArrayMonoid[T]): T
  Source   Edit
proc fold[T](self: RangeReverseArrayMonoid[T]; l, r: int): T
  Source   Edit
proc fold[T](self: RangeReverseArrayMonoid[T]; segment: HSlice[int, int]): T
  Source   Edit
proc get[T](self: RangeReverseArrayMonoid[T]; index: int): T
index番目の値を返します。   Source   Edit
proc get[T](self: RangeReverseArrayMonoid[T]; l, r: int): T
半開区間 [l, r) の総積を返す。   Source   Edit
proc get[T](self: RangeReverseArrayMonoid[T]; segment: HSlice[int, int]): T
閉区間segmentの総積を返します。   Source   Edit
proc get_all[T](self: RangeReverseArrayMonoid[T]): T
[0,len(self))区間の総積をO(1)で返します。   Source   Edit
proc initRangeReverseArrayMonoid[T](v: openArray[T]; op: proc (x, y: T): T; e: T): RangeReverseArrayMonoid[
    T]
vで初期化します。 区間反転、一点取得、一点更新、区間総積はすべて期待O(log N)です。   Source   Edit
proc insert[T](self: RangeReverseArrayMonoid[T]; index: int; value: T)
index の直前に挿入する。index = len なら末尾。   Source   Edit
proc len[T](self: RangeReverseArrayMonoid[T]): int
  Source   Edit
proc max_right[T](self: RangeReverseArrayMonoid[T]; l: int; f: proc (x: T): bool): int
f(get(l, r)) が真となる最大の r を返す。 f(e) = true で、区間を伸ばしたとき真から偽への変化が単調であること。   Source   Edit
proc min_left[T](self: RangeReverseArrayMonoid[T]; r: int; f: proc (x: T): bool): int
f(get(l, r)) が真となる最小の l を返す。 f(e) = true で、区間を伸ばしたとき真から偽への変化が単調であること。   Source   Edit
proc reverse[T](self: RangeReverseArrayMonoid[T]; l, r: int)
半開区間[l, r)を反転します。   Source   Edit
proc reverse[T](self: RangeReverseArrayMonoid[T]; segment: HSlice[int, int])
閉区間segmentを反転します。   Source   Edit
proc toRangeReverseArrayMonoid[T](v: openArray[T]; op: proc (x, y: T): T; e: T): RangeReverseArrayMonoid[
    T]
  Source   Edit
proc toSeq[T](self: RangeReverseArrayMonoid[T]): seq[T]
  Source   Edit
proc update[T](self: RangeReverseArrayMonoid[T]; index: Natural; value: T)
index 番目の値を value に変更する。   Source   Edit

Iterators

iterator items[T](self: RangeReverseArrayMonoid[T]): T
  Source   Edit

Templates

template newRangeReverseArrayMonoidWith(V, op, e: untyped): untyped
  Source   Edit