Types
SegmentTree[T; Elem] = object default: T merge: proc (x: T; y: T): T arr*: seq[Elem] lastnode: int length: int
- Source Edit
Procs
proc `$`[T](self: SegmentTree[T, SegmentTreeElem[T]]): string
- Source Edit
proc `[]=`[T](self: var SegmentTree[T, SegmentTreeElem[T]]; index: Natural; val: T)
- Source Edit
proc `[]`[T](self: var SegmentTree[T, SegmentTreeElem[T]]; index: Natural): var SegmentTreeElem[ T]
- Source Edit
proc `[]`[T](self: var SegmentTree[T, SegmentTreeElem[T]]; segment: HSlice[int, int]): T
- Source Edit
proc get[T](self: var SegmentTree[T, SegmentTreeElem[T]]; q_left: Natural; q_right: Natural): T
- 半解区間[q_left,q_right)についての演算結果を返します。 Source Edit
proc get[T](self: var SegmentTree[T, SegmentTreeElem[T]]; segment: HSlice[int, int]): T
- Source Edit
proc get_all[T](self: SegmentTree[T, SegmentTreeElem[T]]): T
- [0,len(self))区間の演算結果をO(1)で返す Source Edit
proc initSegmentTree[T](n: int; merge: proc (x, y: T): T; default: T): SegmentTree[ T, SegmentTreeElem[T]]
- Source Edit
proc initSegmentTree[T](v: seq[T]; merge: proc (x, y: T): T; default: T): SegmentTree[ T, SegmentTreeElem[T]]
- セグメントツリーを生成します。 vに元となるリスト、mergeに二つの区間をマージする関数、デフォルトに単位元を与えてください。 Source Edit
proc len[T](self: SegmentTree[T, SegmentTreeElem[T]]): int
- Source Edit
proc max_right[T](self: SegmentTree[T, SegmentTreeElem[T]]; l: int; f: proc (l: T): bool): int
- Source Edit
proc min_left[T](self: SegmentTree[T, SegmentTreeElem[T]]; r: int; f: proc (l: T): bool): int
- Source Edit
proc update[T](self: var SegmentTree[T, SegmentTreeElem[T]]; index: Natural; val: T)
- xの要素をvalに変更します。 Source Edit
Templates
template newSegWith(V, merge, default: untyped): untyped
- Source Edit