Coordinate Compression

Coordinate compression replaces sparse or large values with consecutive indices while preserving their order.

Import and API

import atcoder/extra/algorithm/coordinate_compression

proc initCoordinateCompression[T](
  a: openArray[T]
): CoordinateCompression[T]

proc encode(cc, x): int
proc decode(cc, index): T
proc compress(cc, a): seq[int]

Example

let  a = @[100, -5, 100, 7]  cc = initCoordinateCompression(a)doAssert cc.values == @[-5, 7, 100]doAssert cc.compress(a) == @[2, 0, 2, 1]

Complexity