data-structure-typed 2.4.5 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +12984 -0
  2. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +3 -0
  3. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +4505 -0
  4. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +9731 -0
  5. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +347 -0
  6. package/CHANGELOG.md +3 -1
  7. package/README.md +78 -31
  8. package/dist/cjs/binary-tree.cjs +23698 -0
  9. package/dist/cjs/graph.cjs +5236 -0
  10. package/dist/cjs/hash.cjs +1262 -0
  11. package/dist/cjs/heap.cjs +1540 -0
  12. package/dist/cjs/index.cjs +24509 -2899
  13. package/dist/cjs/linked-list.cjs +4370 -0
  14. package/dist/cjs/matrix.cjs +1042 -0
  15. package/dist/cjs/priority-queue.cjs +1314 -0
  16. package/dist/cjs/queue.cjs +4090 -0
  17. package/dist/cjs/stack.cjs +861 -0
  18. package/dist/cjs/trie.cjs +1173 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +23730 -0
  20. package/dist/cjs-legacy/graph.cjs +5234 -0
  21. package/dist/cjs-legacy/hash.cjs +1262 -0
  22. package/dist/cjs-legacy/heap.cjs +1537 -0
  23. package/dist/cjs-legacy/index.cjs +32555 -10936
  24. package/dist/cjs-legacy/linked-list.cjs +4376 -0
  25. package/dist/cjs-legacy/matrix.cjs +1045 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +1312 -0
  27. package/dist/cjs-legacy/queue.cjs +4088 -0
  28. package/dist/cjs-legacy/stack.cjs +861 -0
  29. package/dist/cjs-legacy/trie.cjs +1172 -0
  30. package/dist/esm/binary-tree.mjs +23683 -0
  31. package/dist/esm/graph.mjs +5223 -0
  32. package/dist/esm/hash.mjs +1259 -0
  33. package/dist/esm/heap.mjs +1534 -0
  34. package/dist/esm/index.mjs +24507 -2898
  35. package/dist/esm/linked-list.mjs +4363 -0
  36. package/dist/esm/matrix.mjs +1038 -0
  37. package/dist/esm/priority-queue.mjs +1310 -0
  38. package/dist/esm/queue.mjs +4086 -0
  39. package/dist/esm/stack.mjs +859 -0
  40. package/dist/esm/trie.mjs +1170 -0
  41. package/dist/esm-legacy/binary-tree.mjs +23715 -0
  42. package/dist/esm-legacy/graph.mjs +5221 -0
  43. package/dist/esm-legacy/hash.mjs +1259 -0
  44. package/dist/esm-legacy/heap.mjs +1531 -0
  45. package/dist/esm-legacy/index.mjs +32553 -10935
  46. package/dist/esm-legacy/linked-list.mjs +4369 -0
  47. package/dist/esm-legacy/matrix.mjs +1041 -0
  48. package/dist/esm-legacy/priority-queue.mjs +1308 -0
  49. package/dist/esm-legacy/queue.mjs +4084 -0
  50. package/dist/esm-legacy/stack.mjs +859 -0
  51. package/dist/esm-legacy/trie.mjs +1169 -0
  52. package/dist/types/data-structures/base/index.d.ts +1 -0
  53. package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
  54. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  55. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  56. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +368 -51
  57. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +473 -147
  58. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +931 -80
  59. package/dist/types/data-structures/binary-tree/bst.d.ts +792 -29
  60. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +592 -32
  61. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +320 -135
  62. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3662 -6
  63. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3487 -201
  64. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2778 -65
  65. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3414 -6
  66. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  67. package/dist/types/data-structures/graph/directed-graph.d.ts +419 -47
  68. package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
  69. package/dist/types/data-structures/graph/undirected-graph.d.ts +384 -59
  70. package/dist/types/data-structures/hash/hash-map.d.ts +462 -89
  71. package/dist/types/data-structures/heap/heap.d.ts +567 -99
  72. package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
  73. package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
  74. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +631 -49
  75. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +581 -68
  76. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +775 -12
  77. package/dist/types/data-structures/matrix/matrix.d.ts +491 -0
  78. package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
  79. package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
  80. package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
  81. package/dist/types/data-structures/queue/deque.d.ts +578 -71
  82. package/dist/types/data-structures/queue/queue.d.ts +451 -42
  83. package/dist/types/data-structures/stack/stack.d.ts +374 -32
  84. package/dist/types/data-structures/trie/trie.d.ts +458 -48
  85. package/dist/types/interfaces/graph.d.ts +1 -1
  86. package/dist/types/types/common.d.ts +2 -2
  87. package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
  88. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  89. package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
  90. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  91. package/dist/types/types/utils/validate-type.d.ts +4 -4
  92. package/dist/umd/data-structure-typed.js +32432 -10808
  93. package/dist/umd/data-structure-typed.min.js +10 -4
  94. package/docs-site-docusaurus/README.md +41 -0
  95. package/docs-site-docusaurus/docs/api/README.md +52 -0
  96. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6130 -0
  97. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
  98. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
  99. package/docs-site-docusaurus/docs/api/classes/BST.md +5831 -0
  100. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
  101. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
  102. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
  103. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
  104. package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
  105. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
  106. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
  107. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
  108. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
  109. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
  110. package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
  111. package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
  112. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
  113. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
  114. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
  115. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
  116. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
  117. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
  118. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
  119. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
  120. package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
  121. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
  122. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
  123. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
  124. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
  125. package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
  126. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
  127. package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
  128. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6374 -0
  129. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
  130. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
  131. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
  132. package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
  133. package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
  134. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1257 -0
  135. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1475 -0
  136. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1117 -0
  137. package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
  138. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
  139. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
  140. package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
  141. package/docs-site-docusaurus/docs/guide/architecture.md +613 -0
  142. package/docs-site-docusaurus/docs/guide/concepts.md +420 -0
  143. package/docs-site-docusaurus/docs/guide/guides.md +611 -0
  144. package/docs-site-docusaurus/docs/guide/installation.md +60 -0
  145. package/docs-site-docusaurus/docs/guide/integrations.md +823 -0
  146. package/docs-site-docusaurus/docs/guide/overview.md +638 -0
  147. package/docs-site-docusaurus/docs/guide/performance.md +833 -0
  148. package/docs-site-docusaurus/docs/guide/quick-start.md +73 -0
  149. package/docs-site-docusaurus/docusaurus.config.ts +159 -0
  150. package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
  151. package/docs-site-docusaurus/package-lock.json +18667 -0
  152. package/docs-site-docusaurus/package.json +50 -0
  153. package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
  154. package/docs-site-docusaurus/sidebars.ts +23 -0
  155. package/docs-site-docusaurus/sort-protected.mjs +87 -0
  156. package/docs-site-docusaurus/src/css/custom.css +96 -0
  157. package/docs-site-docusaurus/src/pages/index.module.css +13 -0
  158. package/docs-site-docusaurus/src/pages/index.tsx +71 -0
  159. package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
  160. package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
  161. package/docs-site-docusaurus/static/.nojekyll +0 -0
  162. package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  163. package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
  164. package/docs-site-docusaurus/static/img/favicon.ico +0 -0
  165. package/docs-site-docusaurus/static/img/favicon.png +0 -0
  166. package/docs-site-docusaurus/static/img/logo-180.png +0 -0
  167. package/docs-site-docusaurus/static/img/logo.jpg +0 -0
  168. package/docs-site-docusaurus/static/img/logo.png +0 -0
  169. package/docs-site-docusaurus/static/img/logo.svg +1 -0
  170. package/docs-site-docusaurus/static/img/og-image.png +0 -0
  171. package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  172. package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  173. package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  174. package/docs-site-docusaurus/static/robots.txt +4 -0
  175. package/docs-site-docusaurus/typedoc.json +23 -0
  176. package/package.json +109 -12
  177. package/src/data-structures/base/index.ts +1 -0
  178. package/src/data-structures/base/iterable-element-base.ts +4 -5
  179. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  180. package/src/data-structures/base/linear-base.ts +3 -3
  181. package/src/data-structures/binary-tree/avl-tree.ts +386 -51
  182. package/src/data-structures/binary-tree/binary-indexed-tree.ts +596 -247
  183. package/src/data-structures/binary-tree/binary-tree.ts +956 -81
  184. package/src/data-structures/binary-tree/bst.ts +840 -35
  185. package/src/data-structures/binary-tree/red-black-tree.ts +689 -97
  186. package/src/data-structures/binary-tree/segment-tree.ts +498 -249
  187. package/src/data-structures/binary-tree/tree-map.ts +3784 -7
  188. package/src/data-structures/binary-tree/tree-multi-map.ts +3614 -211
  189. package/src/data-structures/binary-tree/tree-multi-set.ts +2874 -65
  190. package/src/data-structures/binary-tree/tree-set.ts +3531 -10
  191. package/src/data-structures/graph/abstract-graph.ts +4 -4
  192. package/src/data-structures/graph/directed-graph.ts +429 -47
  193. package/src/data-structures/graph/map-graph.ts +59 -1
  194. package/src/data-structures/graph/undirected-graph.ts +393 -59
  195. package/src/data-structures/hash/hash-map.ts +476 -92
  196. package/src/data-structures/heap/heap.ts +581 -99
  197. package/src/data-structures/heap/max-heap.ts +46 -0
  198. package/src/data-structures/heap/min-heap.ts +59 -0
  199. package/src/data-structures/linked-list/doubly-linked-list.ts +646 -47
  200. package/src/data-structures/linked-list/singly-linked-list.ts +596 -68
  201. package/src/data-structures/linked-list/skip-linked-list.ts +1067 -90
  202. package/src/data-structures/matrix/matrix.ts +584 -12
  203. package/src/data-structures/priority-queue/max-priority-queue.ts +57 -0
  204. package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
  205. package/src/data-structures/priority-queue/priority-queue.ts +60 -0
  206. package/src/data-structures/queue/deque.ts +592 -70
  207. package/src/data-structures/queue/queue.ts +463 -42
  208. package/src/data-structures/stack/stack.ts +384 -32
  209. package/src/data-structures/trie/trie.ts +470 -48
  210. package/src/interfaces/graph.ts +1 -1
  211. package/src/types/common.ts +2 -2
  212. package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
  213. package/src/types/data-structures/heap/heap.ts +1 -0
  214. package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
  215. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  216. package/src/types/utils/validate-type.ts +4 -4
  217. package/vercel.json +6 -0
  218. package/dist/leetcode/avl-tree-counter.mjs +0 -2957
  219. package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
  220. package/dist/leetcode/avl-tree.mjs +0 -2720
  221. package/dist/leetcode/binary-tree.mjs +0 -1594
  222. package/dist/leetcode/bst.mjs +0 -2398
  223. package/dist/leetcode/deque.mjs +0 -683
  224. package/dist/leetcode/directed-graph.mjs +0 -1733
  225. package/dist/leetcode/doubly-linked-list.mjs +0 -709
  226. package/dist/leetcode/hash-map.mjs +0 -493
  227. package/dist/leetcode/heap.mjs +0 -542
  228. package/dist/leetcode/max-heap.mjs +0 -375
  229. package/dist/leetcode/max-priority-queue.mjs +0 -383
  230. package/dist/leetcode/min-heap.mjs +0 -363
  231. package/dist/leetcode/min-priority-queue.mjs +0 -371
  232. package/dist/leetcode/priority-queue.mjs +0 -363
  233. package/dist/leetcode/queue.mjs +0 -943
  234. package/dist/leetcode/red-black-tree.mjs +0 -2765
  235. package/dist/leetcode/singly-linked-list.mjs +0 -754
  236. package/dist/leetcode/stack.mjs +0 -217
  237. package/dist/leetcode/tree-counter.mjs +0 -3039
  238. package/dist/leetcode/tree-multi-map.mjs +0 -2913
  239. package/dist/leetcode/trie.mjs +0 -413
  240. package/dist/leetcode/undirected-graph.mjs +0 -1650
@@ -2,159 +2,344 @@
2
2
  * data-structure-typed
3
3
  *
4
4
  * @author Pablo Zeng
5
- * @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
6
5
  * @license MIT License
7
6
  */
8
- import type { SegmentTreeNodeVal } from '../../types';
9
- export declare class SegmentTreeNode {
10
- /**
11
- * The constructor initializes the properties of a SegmentTreeNode object.
12
- * @param {number} start - The `start` parameter represents the starting index of the segment covered
13
- * by this node in a segment tree.
14
- * @param {number} end - The `end` parameter represents the end index of the segment covered by this
15
- * node in a segment tree.
16
- * @param {number} sum - The `sum` parameter represents the sum of the values in the range covered by
17
- * the segment tree node.
18
- * @param {SegmentTreeNodeVal | undefined} [value] - The `value` parameter is an optional parameter
19
- * of type `SegmentTreeNodeVal`. It represents the value associated with the segment tree node.
20
- */
21
- constructor(start: number, end: number, sum: number, value?: SegmentTreeNodeVal | undefined);
22
- protected _start: number;
23
- /**
24
- * The function returns the value of the protected variable _start.
25
- * @returns The start value, which is of type number.
26
- */
27
- get start(): number;
28
- /**
29
- * The above function sets the value of the "start" property.
30
- * @param {number} value - The value parameter is of type number.
31
- */
32
- set start(value: number);
33
- protected _end: number;
34
- /**
35
- * The function returns the value of the protected variable `_end`.
36
- * @returns The value of the protected property `_end`.
37
- */
38
- get end(): number;
39
- /**
40
- * The above function sets the value of the "end" property.
41
- * @param {number} value - The value parameter is a number that represents the new value for the end
42
- * property.
43
- */
44
- set end(value: number);
45
- protected _value: SegmentTreeNodeVal | undefined;
46
- /**
47
- * The function returns the value of a segment tree node.
48
- * @returns The value being returned is either a `SegmentTreeNodeVal` object or `undefined`.
49
- */
50
- get value(): SegmentTreeNodeVal | undefined;
51
- /**
52
- * The function sets the value of a segment tree node.
53
- * @param {SegmentTreeNodeVal | undefined} value - The `value` parameter is of type
54
- * `SegmentTreeNodeVal` or `undefined`.
55
- */
56
- set value(value: SegmentTreeNodeVal | undefined);
57
- protected _sum: number;
58
- /**
59
- * The function returns the value of the sum property.
60
- * @returns The method is returning the value of the variable `_sum`.
61
- */
62
- get sum(): number;
63
- /**
64
- * The above function sets the value of the sum property.
65
- * @param {number} value - The parameter "value" is of type "number".
66
- */
67
- set sum(value: number);
68
- protected _left: SegmentTreeNode | undefined;
69
- /**
70
- * The function returns the left child of a segment tree node.
71
- * @returns The `left` property of the `SegmentTreeNode` object is being returned. It is of type
72
- * `SegmentTreeNode` or `undefined`.
73
- */
74
- get left(): SegmentTreeNode | undefined;
75
- /**
76
- * The function sets the value of the left property of a SegmentTreeNode object.
77
- * @param {SegmentTreeNode | undefined} value - The value parameter is of type SegmentTreeNode or
78
- * undefined.
79
- */
80
- set left(value: SegmentTreeNode | undefined);
81
- protected _right: SegmentTreeNode | undefined;
82
- /**
83
- * The function returns the right child of a segment tree node.
84
- * @returns The `getRight()` method is returning a value of type `SegmentTreeNode` or `undefined`.
85
- */
86
- get right(): SegmentTreeNode | undefined;
7
+ export type SegmentTreeOptions<E> = {
8
+ merger: (a: E, b: E) => E;
9
+ identity: E;
10
+ };
11
+ /**
12
+ * Generic Segment Tree with flat array internals.
13
+ *
14
+ * Supports any associative merge operation (sum, min, max, gcd, etc.).
15
+ * Reference: AtCoder Library segtree<S, op, e>.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const sumTree = SegmentTree.sum([1, 2, 3, 4, 5]);
20
+ * sumTree.query(1, 3); // 9 (2+3+4)
21
+ * sumTree.update(2, 10); // [1, 2, 10, 4, 5]
22
+ * sumTree.query(1, 3); // 16 (2+10+4)
23
+ *
24
+ * const minTree = SegmentTree.min([5, 2, 8, 1, 9]);
25
+ * minTree.query(0, 4); // 1
26
+ * ```
27
+ */
28
+ export declare class SegmentTree<E = number> implements Iterable<E> {
29
+ protected readonly _merger: (a: E, b: E) => E;
30
+ protected readonly _identity: E;
31
+ protected _n: number;
32
+ protected _tree: E[];
33
+ protected _treeSize: number;
34
+ constructor(elements: E[], options: SegmentTreeOptions<E>);
87
35
  /**
88
- * The function sets the right child of a segment tree node.
89
- * @param {SegmentTreeNode | undefined} value - The `value` parameter is of type `SegmentTreeNode |
90
- * undefined`. This means that it can accept either a `SegmentTreeNode` object or `undefined` as its
91
- * value.
36
+ * Create a sum segment tree.
37
+ * @example
38
+ * ```ts
39
+ * const st = SegmentTree.sum([1, 2, 3, 4, 5]);
40
+ * st.query(0, 2); // 6 (1+2+3)
41
+ * st.update(1, 10);
42
+ * st.query(0, 2); // 14 (1+10+3)
43
+ * ```
92
44
  */
93
- set right(value: SegmentTreeNode | undefined);
94
- }
95
- export declare class SegmentTree {
45
+ static sum(elements: number[]): SegmentTree<number>;
96
46
  /**
97
- * The constructor initializes the values, start, end, and root properties of an object.
98
- * @param {number[]} values - An array of numbers that will be used to build a binary search tree.
99
- * @param {number} [start] - The `start` parameter is the index of the first element in the `values` array that should
100
- * be included in the range. If no value is provided for `start`, it defaults to 0, which means the range starts from
101
- * the beginning of the array.
102
- * @param {number} [end] - The "end" parameter is the index of the last element in the "values" array that should be
103
- * included in the range. If not provided, it defaults to the index of the last element in the "values" array.
47
+ * Create a min segment tree.
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ * @example
80
+ * // Temperature monitoring with range queries
81
+ * // Hourly temperatures for a day (24 readings)
82
+ * const temps = [18, 17, 16, 15, 16, 18, 21, 24, 27, 29, 31, 32, 33, 32, 31, 29, 27, 25, 23, 21, 20, 19, 18, 17];
83
+ * const tree = SegmentTree.sum(temps);
84
+ *
85
+ * // Average temperature during work hours (9-17)
86
+ * const workSum = tree.query(9, 17);
87
+ * console.log(workSum / 9); // toBeCloseTo;
88
+ *
89
+ * // Sum of morning temps (6-11)
90
+ * console.log(tree.query(6, 11)); // 164;
104
91
  */
105
- constructor(values: number[], start?: number, end?: number);
106
- protected _values: number[];
92
+ static min(elements: number[]): SegmentTree<number>;
107
93
  /**
108
- * The function returns an array of numbers.
109
- * @returns An array of numbers is being returned.
94
+ * Create a max segment tree.
95
+ * @example
96
+ * ```ts
97
+ * const st = SegmentTree.max([3, 1, 4, 1, 5]);
98
+ * st.query(1, 4); // 5
99
+ * ```
110
100
  */
111
- get values(): number[];
112
- protected _start: number;
101
+ static max(elements: number[]): SegmentTree<number>;
113
102
  /**
114
- * The function returns the value of the protected variable _start.
115
- * @returns The start value, which is of type number.
103
+ * Point update: set element at index to value.
104
+ * Time: O(log n)
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+ * @example
137
+ * // Dynamic range sum with updates
138
+ * // Monthly revenue data (in thousands)
139
+ * const revenue = [120, 95, 140, 110, 85, 130, 150, 100, 160, 125, 90, 175];
140
+ * const tree = SegmentTree.sum(revenue);
141
+ *
142
+ * // Q1 revenue (Jan-Mar)
143
+ * console.log(tree.query(0, 2)); // 355;
144
+ *
145
+ * // Update March revenue from 140 to 200
146
+ * tree.update(2, 200);
147
+ *
148
+ * // Q1 revenue after update
149
+ * console.log(tree.query(0, 2)); // 415;
150
+ *
151
+ * // H1 revenue (Jan-Jun)
152
+ * console.log(tree.query(0, 5)); // 740;
116
153
  */
117
- get start(): number;
118
- protected _end: number;
154
+ update(index: number, value: E): void;
119
155
  /**
120
- * The function returns the value of the protected variable `_end`.
121
- * @returns The value of the protected property `_end`.
156
+ * Range query: returns merger result over [start, end] (inclusive).
157
+ * Time: O(log n)
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+ * @example
190
+ * // Range sum query on an array
191
+ * const tree = SegmentTree.sum([1, 3, 5, 7, 9, 11]);
192
+ *
193
+ * // Query sum of range [1, 3] → 3 + 5 + 7 = 15
194
+ * console.log(tree.query(1, 3)); // 15;
195
+ *
196
+ * // Query entire range
197
+ * console.log(tree.query(0, 5)); // 36;
198
+ *
199
+ * // Query single element
200
+ * console.log(tree.query(2, 2)); // 5;
122
201
  */
123
- get end(): number;
124
- protected _root: SegmentTreeNode | undefined;
202
+ query(start: number, end: number): E;
125
203
  /**
126
- * The function returns the root node of a segment tree.
127
- * @returns The `root` property of the class `SegmentTreeNode` or `undefined` if it is not defined.
204
+ * Get element at index.
205
+ * Time: O(1)
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+ * @example
238
+ * // Point access on segment tree
239
+ * const st = SegmentTree.sum([10, 20, 30, 40]);
240
+ * console.log(st.get(0)); // 10;
241
+ * console.log(st.get(2)); // 30;
128
242
  */
129
- get root(): SegmentTreeNode | undefined;
243
+ get(index: number): E;
130
244
  /**
131
- * The build function creates a segment tree by recursively dividing the given range into smaller segments and assigning
132
- * the sum of values to each segment.
133
- * @param {number} start - The `start` parameter represents the starting index of the segment or range for which we are
134
- * building the segment tree.
135
- * @param {number} end - The "end" parameter represents the ending index of the segment or range for which we want to
136
- * build a segment tree.
137
- * @returns a SegmentTreeNode object.
245
+ * Find the largest r such that predicate(query(left, r)) is true.
246
+ * Returns left-1 if predicate(identity) is false.
247
+ * Returns n-1 if predicate holds for the entire range [left, n-1].
248
+ * Time: O(log n)
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+ * @example
281
+ * // Find rightmost position where predicate holds
282
+ * // Prefix sums: find the rightmost index where prefix sum < 10
283
+ * const st = SegmentTree.sum([3, 1, 4, 1, 5]);
284
+ * // maxRight(0, sum => sum < 10) — prefix [3,4,8,9,14]
285
+ * // sum < 10 holds through index 3 (prefix=9), fails at 4 (prefix=14)
286
+ * const result = st.maxRight(0, sum => sum < 10);
287
+ * console.log(result); // 3;
138
288
  */
139
- build(start: number, end: number): SegmentTreeNode;
289
+ maxRight(left: number, predicate: (segValue: E) => boolean): number;
140
290
  /**
141
- * The function updates the value of a node in a segment tree and recalculates the sum of its children if they exist.
142
- * @param {number} index - The index parameter represents the index of the node in the segment tree that needs to be
143
- * updated.
144
- * @param {number} sum - The `sum` parameter represents the new value that should be assigned to the `sum` property of
145
- * the `SegmentTreeNode` at the specified `index`.
146
- * @param {SegmentTreeNodeVal} [value] - The `value` parameter is an optional value that can be assigned to the `value`
147
- * property of the `SegmentTreeNode` object. It is not currently used in the code, but you can uncomment the line `//
148
- * cur.value = value;` and pass a value for `value` in the
149
- * @returns The function does not return anything.
291
+ * Find the smallest l such that predicate(query(l, right)) is true.
292
+ * Returns right+1 if predicate(identity) is false.
293
+ * Returns 0 if predicate holds for the entire range [0, right].
294
+ * Time: O(log n)
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+ * @example
327
+ * // Find leftmost position where predicate holds
328
+ * const st = SegmentTree.sum([3, 1, 4, 1, 5]);
329
+ * // minLeft(5, sum => sum < 7) — suffix sums from right
330
+ * // From right: [5]=5 < 7, [1,5]=6 < 7, [4,1,5]=10 ≥ 7
331
+ * const result = st.minLeft(5, sum => sum < 7);
332
+ * console.log(result); // 3;
150
333
  */
151
- updateNode(index: number, sum: number, value?: SegmentTreeNodeVal): void;
334
+ minLeft(right: number, predicate: (segValue: E) => boolean): number;
335
+ get size(): number;
336
+ isEmpty(): boolean;
337
+ clone(): SegmentTree<E>;
338
+ toArray(): E[];
152
339
  /**
153
- * The function `querySumByRange` calculates the sum of values within a given range in a segment tree.
154
- * @param {number} indexA - The starting index of the range for which you want to calculate the sum.
155
- * @param {number} indexB - The parameter `indexB` represents the ending index of the range for which you want to
156
- * calculate the sum.
157
- * @returns The function `querySumByRange` returns a number.
340
+ * Iterates over leaf values in index order.
158
341
  */
159
- querySumByRange(indexA: number, indexB: number): number;
342
+ [Symbol.iterator](): IterableIterator<E>;
343
+ forEach(callback: (value: E, index: number) => void): void;
344
+ print(): void;
160
345
  }