Types
MergeTree = object ein: seq[int] eout: seq[int] et: seq[int] ret: seq[int] tree: UnWeightedUnDirectedGraph uf: UnionFind now: seq[int] N: int alr_query: int v: seq[(int, int)]
- Source Edit
Procs
proc get_id(self: var MergeTree; x: int): int {....raises: [], tags: [].}
- xが現在の状態でどこの頂点で表される集合に属しているかを返す Source Edit
proc get_range(self: var MergeTree; x: int): HSlice[int, int] {....raises: [], tags: [].}
- ある集合について、それに属している頂点を区間で返す Source Edit
proc index(self: var MergeTree; x: int): int {....raises: [], tags: [].}
- オイラーツアー順でxは何番目かを返す Source Edit
proc initMergeTree(N: int; v: seq[(int, int)]): MergeTree {....raises: [], tags: [].}
- クエリを前読みする必要があるので、頂点数とマージを配列で与える Source Edit
proc restore_seq[T](self: var MergeTree; v: seq[T]): seq[T]
- オイラーツアー順になっている配列をもとに戻す Source Edit