{"_id":"@zakkster/lite-logn","_rev":"20-b097d65cff34e3c3aba00bd917460cc6","name":"@zakkster/lite-logn","dist-tags":{"latest":"1.4.0"},"versions":{"0.1.0":{"name":"@zakkster/lite-logn","version":"0.1.0","keywords":["binary-heap","heap","priority-queue","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","segment-tree","range-query","range-sum","skip-list","ordered-set","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.1.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"47742bc563dfe1ff6de0b5dc8ba1d8395a7eeb06","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.1.0.tgz","fileCount":7,"integrity":"sha512-zUAvRQ3K/rocQD3T/a+8TBxzQbhLeXrTi1/s+YTIn5xQg7SJOi6sqaJXy7k7dpgBrCsqtUItOdYqiUHGW5SlEw==","signatures":[{"sig":"MEUCIGH5NVQcpHdSpyQmzN/GEe3kbqidP1YLRog7evaVWfbTAiEAxd83++iQ5cbB9RXZN4P1AcVHWvjzOsSALMAzAaK2tig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44879},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"650f270311ed53d22533df4f41e77250122d4d42","scripts":{"test":"node --test test/*.test.js test/Bench.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"12.0.2","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.3.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.1.0_1789606649380_0.4180049855665724","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@zakkster/lite-logn","version":"0.3.0","keywords":["binary-heap","heap","priority-queue","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","segment-tree","range-query","range-sum","skip-list","ordered-set","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.3.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"8d72938d5efc4f20eb48144a22208d2412b6429c","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.3.0.tgz","fileCount":7,"integrity":"sha512-w9fM5QIusVXPqFTZGzjZDHqqQ0eENP/lynSUlXGA8Pg0wGfk+2M1r9EPylgfYu+UzsGz8z+H5R+OcobQUvtZtQ==","signatures":[{"sig":"MEQCICtEyeuynzGxO9ca+d6hjmE4V4Z2wnejknVmTLd5fr5VAiBOoGhwHX7wOxuggT81muQkIETjPZ6Izbwo60AnpaD43g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAyV6Zcav89t32SmibeUOoEp3QtkumJkbu9bCBl+K88nAiEAhlF3UQrjtdB6lbJs7Vvn1HUgSoh+sTPrN6UB7esRDD4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91660},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"edc1c7ff4aeda08361ae31e965956a6a919e484d","scripts":{"test":"node --test test/*.test.js test/Bench.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.3.0_1789660060353_0.6928434408651529","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@zakkster/lite-logn","version":"0.4.0","keywords":["binary-heap","heap","priority-queue","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","segment-tree","range-query","range-sum","skip-list","ordered-set","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.4.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"ba1f8412dfa77c275655251dd05f2cb651ebc3d7","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.4.0.tgz","fileCount":7,"integrity":"sha512-uyCX2C4XOIB16ivP6wsS4d+OUS1W9r0kKBG92ByCHuZb/e3spfNrkwg1w8+eXfiuoy5edbQ+oYUCBUNMy+mLrA==","signatures":[{"sig":"MEYCIQC5scDrbDh0+n8xQR/Jsul4fvfPDm5tcYiQNXEWvvX+JQIhAN+3ynLjOosFCoUbvCW2BNRS4D5lsnFPqu5r9EhMRMBs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAkUMLUNEYX/ifdb1pjAwbgYPObd+pFk8bX3iEoH1k6gAiEAz5VDpQ7njb+70QZugVgRaWZTINNKqv3RMPJXL6Bn9lg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127539},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"edc1c7ff4aeda08361ae31e965956a6a919e484d","scripts":{"test":"node --test test/*.test.js test/Bench.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.4.0_1789675633039_0.06889261463312679","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@zakkster/lite-logn","version":"0.5.0","keywords":["binary-heap","heap","priority-queue","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","segment-tree","range-query","range-sum","skip-list","treap","ordered-set","ordered-map","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.5.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"ce9ef1429a9964104c04b73149c600e7b05b7996","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.5.0.tgz","fileCount":7,"integrity":"sha512-JNoNWZ+NRbc9B24e8oU6qTshrlGl8K3hGlSc/chgaXF71KmG2bdEaemqNTzrQS2cW777AVIiOtQQD1Nc/kv8xw==","signatures":[{"sig":"MEUCIG1PHXwur7hNLS4vZ7W+9w9qwma5VVAWDAE26Ncodc8pAiEA+xELUef0pFSTmAid3v4/byZ6bx+L7vk1sR+JPjPYPLM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD2JGqYThjbU8n3zsAJs95uvYWi0vkV20U5MymTGosRYwIhAPehh7X2OWocqFi5ivEeryiugIU+v9fgDJSz1KoT+Zu5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177049},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"18eaa4ae9b8d7f2fd1835b71a1e4073acdd603f1","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.5.0_1789869255697_0.9230903097678527","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@zakkster/lite-logn","version":"0.6.0","keywords":["binary-heap","heap","priority-queue","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","segment-tree","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","ordered-set","ordered-map","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.6.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"78a83ae495834604dc003f6e8228512a44416886","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.6.0.tgz","fileCount":7,"integrity":"sha512-y0vzbv5afg4ZWYNiMo+TpomUr54UaP+fp+1OU+80lbdWBqV00IoBsvgqd5HRjPBjO2J7906Cis9n0irF443SNA==","signatures":[{"sig":"MEUCIHioTJXrtvMpR8NodZCLx6YBvP43LPuwbE8znaKtRAFoAiEA3l55coUParW3JT3X3EjRynOibY2Nu1Cho3/3riIAul8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC0vZAXhHchqGljc2W6V6jiFkcc+7pqreDElWtJxpWnjQIgZT2CP5RKDnUwkdTVzC0uOyQsmUy0OA/dWqTWPnqyjS8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220363},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"417b893ab3344efe139eab21943b8d06e4b21137","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.6.0_1789885456297_0.9062039987172288","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@zakkster/lite-logn","version":"0.7.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","segment-tree","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","ordered-set","ordered-map","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.7.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"e8993d5274380ea0d979284c388ecbb9c3a3f764","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.7.0.tgz","fileCount":7,"integrity":"sha512-Eari27wSBoS1WI6lq3cBYPe4hJhMR2MWgDkoz2GVSteU5vGtGY/3qXPIEBoL7pjhc2x/pPe2fgRmzWZP58zJbA==","signatures":[{"sig":"MEUCIFsS/c12tcvsB094HQ2acedxPTPcpf58h53t/jRY053KAiEAxQcHhJDDJV2/z/epbRa84fSyoPPCg7RXH9ceFU2th88=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDVzeR5Psa0LHPFKbjDi8EhklIb22/VE9xRfgb2DafT+gIhAI3438ksNbq1xqsc0wC56tmSVyMzxCCYTi5kZWQoOxym","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253142},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"099386fd156311fb7e50d417fcf6cd83cb6def2b","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.7.0_1789894153549_0.11971417612393354","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@zakkster/lite-logn","version":"0.8.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","segment-tree","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","ordered-set","ordered-map","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.8.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"ddd09c8cb85d5091cd6d13bc8085b4f7fdf65e04","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.8.0.tgz","fileCount":7,"integrity":"sha512-tv62+opRu9Ft8M77cKyjb5rp3dfwlKaQ5+PM/yanuKoZEg/EQqVlqFW6uybwa0UAySLu6NHHCeVydkb63HVpag==","signatures":[{"sig":"MEQCICWUQTirASrsnxeP/vfA6laVCDVx+iK8tntPkbJ7g7TfAiBkU3ARdhgusE1ZANHRaWVHcOcBjrtEds05zQYzl4v+tQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDZME+jTBX1g4LlkNKvTVqHz2RKkVL8Ye5LMiaZjAsHegIgMdQLlE3V/6/fNXgt0lqMObGviR+MNumYd3kEEesD9Tk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291142},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"57ca13d6c94ef8df2538b25054fd27a461f437d7","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.8.0_1789945071263_0.3228005738843549","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@zakkster/lite-logn","version":"0.9.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","segment-tree","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","mergeable-heap","meld","ordered-set","ordered-map","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.9.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"ebe90cd88690f64764588f6992037d79b53ac64e","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.9.0.tgz","fileCount":7,"integrity":"sha512-+7yp+r3ctdoPIKQ1X8FFoLrGJaNTXgTe/HrmUZnZj/6Ajp61dEUamDxWZR5415+mmPpLy5aUkp0Mc82LtdD0jg==","signatures":[{"sig":"MEUCIQCJd607/XTL10eVm933uAYelCL9EJ210iT9bISPtWxTHwIgNQNbRez/NO9lkhwp41dzv/FHZIEQRv9ffMmmKMRkpH8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDYL/rRiuzJlLcS14xAhycpEQJV7j5lCX8PwUtQSxWyvwIgOVcC40jQh/vvQCsa6B4kcmUvN5Hs/KnsxcDgVP2/s38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329391},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"838154805aefab25421399b6dc92aa4b9e952417","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.9.0_1789952304749_0.9812493138887277","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@zakkster/lite-logn","version":"0.10.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","segment-tree","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.10.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"5f8b9607cdee7ea5cc9fdf6c0bce7265ba40b09b","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.10.0.tgz","fileCount":7,"integrity":"sha512-giR0QfPOeCORysmIrj6UhILGReaa1+IZJ+mB5kOSGR7VZ1nD6ZuR8bu7P5daR9OYhxuhHQlxR8UPt0y+O0OgVw==","signatures":[{"sig":"MEUCIQD8dNimPenTEYee495nXpgG+X/SnBS1+a8FWUMGijaIdQIgaz6MpZMNifSq+L9qGCIPmtaQpY1k3/hX43orp4gKsGM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCo+RcANhBhVe2l/pAESGZffAsFHwdFFP+NzBfVx8zeLQIgG11ambTYu/FWia8VB+ZfzL2x7qcTPwlPj9Cy1JTxmjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":380350},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"1399af04a43111d9fd1ddcd417f4f254194f31a3","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.10.0_1789972124043_0.3066000091675354","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@zakkster/lite-logn","version":"0.12.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.12.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"047a88fd672dcf5478720edab64f2fb8910035e0","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.12.0.tgz","fileCount":7,"integrity":"sha512-SnjqVTECRo0zZD0LscTnLR+5qdgwuhqNPoH7w6NHJszS4GHN2OaRXrR4/FhWn2uT/iw2suQgnXJi1qR0lMKW2A==","signatures":[{"sig":"MEQCIC+ll1ivciE4chsCXPDFiAabk/W9MxFUJhHzBDTQI8+6AiAtJxq5RGahJsrDaZZcnnm7GL9/s7a2uv1qj06Ozwypzg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIH80EJsPnK6OdcBnj6QsILX96zUE11ciBPwZTa1KmTzqAiEAwb2EP2c9+fW3uA+QnR4OsF1FX6onZThZWt3gG1TGotY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":476449},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"12082f6d810df882573fef2a4616750d5518642a","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.12.0_1790023164973_0.13400109241156466","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@zakkster/lite-logn","version":"0.13.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree-2d","2d-segment-tree","range-min-2d","range-max-2d","rectangle-min","rectangle-max","2d-range-query","segment-tree","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.13.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"ae576c58cdbfc4af7042b907129107d9a13402a5","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.13.0.tgz","fileCount":7,"integrity":"sha512-AU95tvDobuAdoC4s5uCgHl3z9EgwapZmnp0a9zTKEB0rIWNd9O2LtQZQmg/gBXqz7kNOtU39CiYeyAp4KxS1kg==","signatures":[{"sig":"MEUCIDqu+X70vDRiVm7B/TIGYnCON39i8ASOBo42rpKuhKkDAiEAsPIJVPF3aSKoSMDUGm0IokBipEQLGKrFEMeIMw9LBzo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCqFis3+SwHrxvKrZF+7svP9dThEwKFsS7KJkycfxnIDAIgErmqvhkd0tKyeAIhWSgx+OiJz1ZeBjK6H6mm17D93uo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":505998},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"8dc0859b5c2b2334a036d2b7e17191765602d223","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.13.0_1790030916988_0.8726315400555413","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@zakkster/lite-logn","version":"0.14.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree-2d","2d-segment-tree","range-min-2d","range-max-2d","rectangle-min","rectangle-max","2d-range-query","segment-tree","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","sorted-array","sorted-map","binary-search","ordered-array","cache-friendly","read-optimized","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.14.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"8b8a62be5f3ad8a8066ca9a44dfc2e74940762e5","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.14.0.tgz","fileCount":7,"integrity":"sha512-BbtGH9UYY2h3KCJCJwr4VeDeeDu+2JuwOaj02yEjXMVYXC3PBBBJRgCTGkBScqZjyvZAv6VPZifJN0O4GsLO7g==","signatures":[{"sig":"MEQCIDRQHpocASVGvaMHMDo2eGF37eg341CMfl8DPXpZPvIFAiB7KVXq2BRDXwjpVUQJCud74QyiflIAta8Orfx8ztE3qA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCJbD3+uy85jW76tp325mLeHwSMziXGgb/+HXzacTmoCgIhAIvVB5T/4rodttvUVVXT1bgmOTVtC1mZ9gLs43QKKWjp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":555509},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"9dcdcaa986d5b3a568b60136ee853881681a232b","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.14.0_1790044816369_0.5054224135263505","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@zakkster/lite-logn","version":"0.15.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree-2d","2d-segment-tree","range-min-2d","range-max-2d","rectangle-min","rectangle-max","2d-range-query","segment-tree","persistent","persistent-segment-tree","versioned","path-copying","fully-persistent","immutable","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","sorted-array","sorted-map","binary-search","ordered-array","cache-friendly","read-optimized","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.15.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"aaea1d5038b7d79edf7c038edeb50e39edab2f34","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.15.0.tgz","fileCount":7,"integrity":"sha512-42XhjUuA0cZnOU3J2sQBXrRberoEMAbakr3WQpz6NmuODOxLzy/HhLHGAYbg1GUD4OUhgHs+DsxMp+RA9Bd4hw==","signatures":[{"sig":"MEUCIQCwoe/W64xpd8j2+Q/xpZ5k4ufXq3vw3ccDDTy2m72/kAIgS41eiIeoGxx3slG7P8btkLow+opXfKLBbaaaOD+D9ws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGm0gyf/+zOSmco6UoAM6l5PLqvwhG452cBzjUpJvyKiAiBvYBckee1iU55OzMc8cq15zGjLY9heGXc3JBMf5nySSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":597449},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"ac411eeed0d8659a4533c35614e56628c1b83fca","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.15.0_1790056027451_0.6034283676901508","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@zakkster/lite-logn","version":"0.16.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree-2d","2d-segment-tree","range-min-2d","range-max-2d","rectangle-min","rectangle-max","2d-range-query","segment-tree","persistent","persistent-segment-tree","versioned","path-copying","fully-persistent","immutable","merge-sort-tree","range-rank","offline-range-query","static","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","sorted-array","sorted-map","binary-search","ordered-array","cache-friendly","read-optimized","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@0.16.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"6b542cd2b390859be5b369ce390bd4d95ec79575","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-0.16.0.tgz","fileCount":7,"integrity":"sha512-eR2KNCrNzNI4gdVEVET0ic+EohmiqFh4MPchOypdPAi623pxSSToISzZ0aO+5wxreKS2nv1NSVfLPRlFMyqcuA==","signatures":[{"sig":"MEUCIQD2KmLPEfIOp7PSXJSzo8KO6MHBV6Exfjx5YoqCkW4CVAIgeWG2fdf41QvzzSXO2qOUWX0BMLBzrucbXFMsnFW4zgE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG4hp7CBRcm4RMvnXdTmUjOfe2Uf/Z4URuUhiZ1TaRNmAiEAoXpSvVkdjZ357LqJv5S11tg+Bizz6DXOrr5JpycIev4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":631311},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"ac411eeed0d8659a4533c35614e56628c1b83fca","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_0.16.0_1790125715563_0.1881179387394789","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@zakkster/lite-logn","version":"1.0.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree-2d","2d-segment-tree","range-min-2d","range-max-2d","rectangle-min","rectangle-max","2d-range-query","segment-tree","persistent","persistent-segment-tree","versioned","path-copying","fully-persistent","immutable","merge-sort-tree","range-rank","offline-range-query","static","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","sorted-array","sorted-map","binary-search","ordered-array","cache-friendly","read-optimized","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@1.0.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"e3c47f3f03432e1a4fbcb4e4cfde1470ed843af0","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-1.0.0.tgz","fileCount":7,"integrity":"sha512-qgpTVbtN5HmuTxf1QbfNyPMGA5QA/CxeYCB7qutkgZkrExMpy6n149oc0gUJC3quQ5RxMx77YmRf/AI2woQ60w==","signatures":[{"sig":"MEUCIQCmvJJQ34KwCinmQIhI6SrTxCoZncfx5WuH6vNU88It+AIgCtGuAMeEk68FMXSlxiRMWWXNcDPCNy6scrO7tsEc0RI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFWaUkEwJ6u9w5tRQgeRW2J4PllqUlPYMWujMbjNFShsAiEA1yKg0ErfnajzQ/SZyKBxDNdXxa/xNh/TDnwChRRgBq0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":635284},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"967a1ec4ade8fa726482440747feefec884e99dd","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_1.0.0_1790146082232_0.7424482909455352","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@zakkster/lite-logn","version":"1.1.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree-2d","2d-segment-tree","range-min-2d","range-max-2d","rectangle-min","rectangle-max","2d-range-query","segment-tree","persistent","persistent-segment-tree","versioned","path-copying","fully-persistent","immutable","merge-sort-tree","wavelet-tree","wavelet-matrix","quantile","range-quantile","range-kth-smallest","coordinate-compression","succinct","rank-select-bitvector","range-rank","offline-range-query","static","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","sorted-array","sorted-map","binary-search","ordered-array","cache-friendly","read-optimized","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@1.1.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"45029ab2441560c76901f069cc65f73a94a04888","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-1.1.0.tgz","fileCount":7,"integrity":"sha512-KwVIyuOSUffq9N/zSVweIW2YN6uou6OoiPmPU1paXm8TeC9gbzmZaK09IgmPaaFIviemmujy5vv9S5oNU7kmug==","signatures":[{"sig":"MEUCIQDWmhXUALPwTrJO8+XN6JbrfQAMqNxIFsU1dV02cS25yAIgEUmXL7yqrVM+WvxazKuShTRDJcKoN/Q16yxkeOoIG1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCArLKSsZsceWJLqHXy3b0dDc/YqVbjpHfk8kl59Q2svAIhAKpTO4qalA6PDMxAitFnc0b+qRc9HzC9dFlW5GjEGz/f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":677975},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"967a1ec4ade8fa726482440747feefec884e99dd","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_1.1.0_1790169028812_0.41901418531582224","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@zakkster/lite-logn","version":"1.1.1","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree-2d","2d-segment-tree","range-min-2d","range-max-2d","rectangle-min","rectangle-max","2d-range-query","segment-tree","persistent","persistent-segment-tree","versioned","path-copying","fully-persistent","immutable","merge-sort-tree","wavelet-tree","wavelet-matrix","quantile","range-quantile","range-kth-smallest","coordinate-compression","succinct","rank-select-bitvector","range-rank","offline-range-query","static","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","sorted-array","sorted-map","binary-search","ordered-array","cache-friendly","read-optimized","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@1.1.1","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"8e657afa9dc24472923290b183d188f996786ea6","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-1.1.1.tgz","fileCount":7,"integrity":"sha512-uZqGaq5V5+/QrG48URkPoQ9N50PW/U8zGkMtO9yol/zv/bORyjEC22sFNcPhZVbQdcwoDYvfaG7PAkmA1fObcA==","signatures":[{"sig":"MEYCIQC1lpGO8IqhSYaVDcgBTSppUEu5e4hD3x5bW7XfjvFYNgIhAJvFj23T9xXfIJHayxPQMVD6RWHrUMS70xY09UlnhTjk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCNNH/91G8xC3+do2kkq3+4ychXUY2gjU81iu8jNKch0QIhAMh1lwM90vP+yeE/oFvPRud/lnw8jYuqvH+Odzd92MQn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":684305},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"a7353f1f00baf674a5d094c722bc7e542654b405","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_1.1.1_1790181128993_0.6413653668878712","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@zakkster/lite-logn","version":"1.2.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree-2d","2d-segment-tree","range-min-2d","range-max-2d","rectangle-min","rectangle-max","2d-range-query","segment-tree","persistent","persistent-segment-tree","versioned","path-copying","fully-persistent","immutable","merge-sort-tree","wavelet-tree","wavelet-matrix","quantile","range-quantile","range-kth-smallest","coordinate-compression","succinct","rank-select-bitvector","range-rank","offline-range-query","cartesian-tree","range-minimum-query","rmq","range-min","lowest-common-ancestor","lca","binary-lifting","static","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","sorted-array","sorted-map","binary-search","ordered-array","cache-friendly","read-optimized","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@1.2.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"26edaf93fdc3533cf55b787d5944550e7eac559b","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-1.2.0.tgz","fileCount":7,"integrity":"sha512-cHXBI6eMyZxZVT9p4j+NiVGf8fY8ERpOoeFxxuyYGNANTjvJP50/b5yc2oTIOY9OhYWDR7mcOqC0xumfPqe+Aw==","signatures":[{"sig":"MEQCIFrx3NRGNcZrF3wmv/LaOM6nc6ST7shQg6VMAw337i9VAiBCw5gdAb/PBY6aQFREx+iYmLp6KvTreR2yp/5rbypqYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAqDT2/2xlT2m/ezJ976QjTIx7Fb73EeFQr09xeklQlWAiAn4g21PLnE8RhqutzjfCn4WyD1Im1j0RKgff7VXDmO5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":722240},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"6e0c25dfaec8f50c1c746d7329409557cf233cbc","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_1.2.0_1790214874150_0.3926862076985562","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@zakkster/lite-logn","version":"1.3.0","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree-2d","2d-segment-tree","range-min-2d","range-max-2d","rectangle-min","rectangle-max","2d-range-query","segment-tree","persistent","persistent-segment-tree","versioned","path-copying","fully-persistent","immutable","merge-sort-tree","wavelet-tree","wavelet-matrix","quantile","range-quantile","range-kth-smallest","coordinate-compression","succinct","rank-select-bitvector","range-rank","offline-range-query","cartesian-tree","range-minimum-query","rmq","range-min","lowest-common-ancestor","lca","binary-lifting","link-cut-tree","dynamic-tree","dynamic-forest","dynamic-connectivity","dynamic-mst","path-aggregate","preferred-path","splay-forest","evert","reroot","link-cut","amortized-dynamic","static","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","sorted-array","sorted-map","binary-search","ordered-array","cache-friendly","read-optimized","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","_id":"@zakkster/lite-logn@1.3.0","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"900a0110030721bb27ec7f286e73a5b878082fcd","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-1.3.0.tgz","fileCount":7,"integrity":"sha512-HyACHoeMgbO+Z0Sug2e/4gv8sHc0qlxGQBuFtTlSanRyxJJjhmxx38y9/jvF0ypxDSVZU9Akkd1IdtCvdGUDkQ==","signatures":[{"sig":"MEUCIQCm9hJYcEddZAfgq72t5DgB7ZfGhfDtzUXy3+FH/uPHKQIgPL0wS970ipDzRhL9EwmYQzCHeu4geQ7usINI1p+jn7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBcBmSeNBNdQ41rMP+HkmFM8M9lquWiffblksZUgVF5aAiEA+OTKJfb0ik6Oa3Bnc3DVed0TM2gVpPxldPtbJ7s31S4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":768827},"main":"./LogN.js","type":"module","types":"./LogN.d.ts","module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"1a38599f648d381bf0f9576599a649421d9238b9","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf","torture":"node --expose-gc test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs"},"_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"tmp":"tmp/lite-logn_1.3.0_1790286779613_0.713432105338129","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"_id":"@zakkster/lite-logn@1.4.0","bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"dist":{"shasum":"1122ed252c8b61e760fc232cd78dafb77b903c52","tarball":"https://registry.npmjs.org/@zakkster/lite-logn/-/lite-logn-1.4.0.tgz","fileCount":7,"integrity":"sha512-nWClVsZwuaQx2kY36rXkBfhrUCi3rNl1A9gF8pjQvpLtZMgNtCi3YAGL+a7mvq8jZ0hffTG9exu95K4P5JpGWw==","signatures":[{"sig":"MEUCIQCX8tPF5MKjztJF4CqEsaJAtE6zWSs4WTw5MutHSz6ANQIgMGFGfZw1IfzIjwgdavsJWf9ievPS9SIGxmBJVApJGuA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCLDutKJlCcx0gLM04pua5ll+rMp02qNlc7AmBaZqwB3wIgD+YxA7nVFdkBM7FBTiL70oDIKwY4Wl26fDC265RCwck="}],"unpackedSize":838211},"main":"./LogN.js","name":"@zakkster/lite-logn","type":"module","types":"./LogN.d.ts","author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"module":"./LogN.js","engines":{"node":">=18"},"exports":{".":{"node":"./LogN.js","types":"./LogN.d.ts","import":"./LogN.js","default":"./LogN.js"}},"funding":{"url":"https://github.com/sponsors/PeshoVurtoleta","type":"github"},"gitHead":"c25188b6dd3fc428b59bfdd7c7030646e602a5da","license":"MIT","scripts":{"demo":"node --expose-gc --test demo/Demo.test.mjs","test":"node --test test/*.test.js test/*.test.mjs","bench":"node benchmark/Bench.mjs","verify":"npm test && npm run test:types && npm run torture && npm run witness && npm run test:perf && npm run test:perf:harness && npm run test:perf:kinds && npm run test:perf:noinline","torture":"node --expose-gc --min-semi-space-size=4 --max-semi-space-size=4 test/torture.mjs","witness":"node test/witness.mjs","test:perf":"node --expose-gc --max-semi-space-size=4 --test test/perf/PerfGate.test.mjs","demo:serve":"node demo/serve.mjs","test:types":"tsc -p test/types/tsconfig.json","bench:report":"node benchmark/Bench.mjs && node benchmark/Report.mjs","test:perf:burn":"node test/perf/Burners.mjs","test:perf:kinds":"node test/perf/Lanes.mjs","test:perf:harness":"node --test test/perf/Harness.test.mjs","test:perf:reddiff":"node test/perf/RedDiff.mjs","test:perf:noinline":"node test/perf/Lanes.mjs noinline"},"version":"1.4.0","_npmUser":{"name":"zakkster","email":"shinikchiev@yahoo.com"},"homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree-2d","2d-segment-tree","range-min-2d","range-max-2d","rectangle-min","rectangle-max","2d-range-query","segment-tree","persistent","persistent-segment-tree","versioned","path-copying","fully-persistent","immutable","merge-sort-tree","wavelet-tree","wavelet-matrix","quantile","range-quantile","range-kth-smallest","coordinate-compression","succinct","rank-select-bitvector","range-rank","offline-range-query","cartesian-tree","range-minimum-query","rmq","range-min","lowest-common-ancestor","lca","binary-lifting","link-cut-tree","dynamic-tree","dynamic-forest","dynamic-connectivity","dynamic-mst","path-aggregate","preferred-path","splay-forest","evert","reroot","link-cut","amortized-dynamic","static","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","sorted-array","sorted-map","binary-search","ordered-array","cache-friendly","read-optimized","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"_npmVersion":"11.19.1","description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","directories":{},"maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"sideEffects":false,"_nodeVersion":"26.8.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"^7.0.2","@zakkster/lite-leak":"^1.10.0","@zakkster/lite-perf-gate":"^1.4.2","@zakkster/lite-gc-profiler":"^1.16.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lite-logn_1.4.0_1790547249486_0.31657949436163335"}}},"time":{"created":"2026-09-17T00:57:29.144Z","modified":"2026-09-27T22:14:09.740Z","0.1.0":"2026-09-17T00:57:29.509Z","0.3.0":"2026-09-17T15:47:40.445Z","0.4.0":"2026-09-17T20:07:13.150Z","0.5.0":"2026-09-20T01:54:15.798Z","0.6.0":"2026-09-20T06:24:16.390Z","0.7.0":"2026-09-20T08:49:13.634Z","0.8.0":"2026-09-20T22:57:51.350Z","0.9.0":"2026-09-21T00:58:24.841Z","0.10.0":"2026-09-21T06:28:44.117Z","0.12.0":"2026-09-21T20:39:25.077Z","0.13.0":"2026-09-21T22:48:37.081Z","0.14.0":"2026-09-22T02:40:16.474Z","0.15.0":"2026-09-22T05:47:07.545Z","0.16.0":"2026-09-23T01:08:35.695Z","1.0.0":"2026-09-23T06:48:02.330Z","1.1.0":"2026-09-23T13:10:28.911Z","1.1.1":"2026-09-23T16:32:09.134Z","1.2.0":"2026-09-24T01:54:34.234Z","1.3.0":"2026-09-24T21:52:59.695Z","1.4.0":"2026-09-27T22:14:09.578Z"},"bugs":{"url":"https://github.com/PeshoVurtoleta/lite-logn/issues","email":"shinikchiev@yahoo.com"},"author":{"name":"Zahary Shinikchiev","email":"shinikchiev@yahoo.com"},"license":"MIT","homepage":"https://github.com/PeshoVurtoleta/lite-logn#readme","keywords":["binary-heap","heap","priority-queue","min-max-heap","double-ended-priority-queue","depq","d-ary-heap","fenwick","bit","binary-indexed-tree","prefix-sum","fenwick-2d","2d-fenwick","2d-bit","2d-binary-indexed-tree","rectangle-sum","2d-prefix-sum","range-query-2d","segment-tree-2d","2d-segment-tree","range-min-2d","range-max-2d","rectangle-min","rectangle-max","2d-range-query","segment-tree","persistent","persistent-segment-tree","versioned","path-copying","fully-persistent","immutable","merge-sort-tree","wavelet-tree","wavelet-matrix","quantile","range-quantile","range-kth-smallest","coordinate-compression","succinct","rank-select-bitvector","range-rank","offline-range-query","cartesian-tree","range-minimum-query","rmq","range-min","lowest-common-ancestor","lca","binary-lifting","link-cut-tree","dynamic-tree","dynamic-forest","dynamic-connectivity","dynamic-mst","path-aggregate","preferred-path","splay-forest","evert","reroot","link-cut","amortized-dynamic","static","range-query","range-sum","skip-list","treap","scapegoat","scapegoat-tree","weight-balanced","splay-tree","self-adjusting","binomial-heap","pairing-heap","decrease-key","mergeable-heap","meld","ordered-set","ordered-map","sorted-array","sorted-map","binary-search","ordered-array","cache-friendly","read-optimized","balanced-bst","bst","log-n","logarithmic","order-statistics","rank-select","data-structures","zero-gc","gc","typed-array","soa","tree-shakeable","witness","performance","lightweight","zero-dependency"],"repository":{"url":"git+https://github.com/PeshoVurtoleta/lite-logn.git","type":"git"},"description":"Zero-dependency, zero-GC family of O(log n) data structures that proves its logarithm: BinaryHeap (array-embedded O(log n) push/pop min-heap), Fenwick/BIT (O(log n) point-update AND prefix-sum via the i & -i walk), SegmentTree (O(log n) associative range-","maintainers":[{"name":"zakkster","email":"shinikchiev@yahoo.com"}],"readme":"# @zakkster/lite-logn\n\n> Zero-GC, O(log n) data structures that PROVE their logarithm. The O(log n) sibling of `@zakkster/lite-o1`: where lite-o1 holds the constant (a flat ops/ms line), lite-logn holds the logarithm (a straight line on a log-x axis -- one added level per doubling of n). v1.4.0 ships nineteen members: BinaryHeap (array-embedded O(log n) push / pop min|max heap), Fenwick / BIT (O(log n) point-update AND prefix-sum via the `i & -i` walk), SegmentTree (O(log n) associative range-query -- min / max / sum / gcd -- plus point-update over a flat 2n array), SkipList (pointer-free expected-O(log n) ordered map over a private free-list node pool), Treap (a randomized-balanced augmented ordered map with O(log n) rank / select / split / merge), Scapegoat (a DETERMINISTIC weight-balanced augmented ordered map: worst-case-O(log n) get, amortized-O(log n) set / delete, zero-GC rebuild), MinMaxHeap (an array-embedded double-ended priority queue: O(1) peekMin / peekMax, O(log n) push / popMin / popMax), SplayTree (a self-adjusting ordered map: amortized-O(log n) get / set / delete via top-down splay, hot keys ride near the root), BinomialHeap (a mergeable priority queue: O(log n) meld of two heaps over a shared arena, O(1)-amortized push, O(log n) popMin), PairingHeap (an ADDRESSABLE mergeable priority queue: O(1) push / meld over a shared arena, amortized-O(log n) popMin / decreaseKey / remove by arena-wide-unique id), FibonacciHeap (the textbook-optimal ADDRESSABLE mergeable priority queue: O(1)-amortized push / meld / decreaseKey, O(log n)-amortized popMin / remove), Fenwick2D (the family's FIRST 2D structure: O(log^2 n) point-update AND rectangle-sum over a flat 2D Binary Indexed Tree), SegmentTree2D (the general 2D rectangle FOLD a 2D BIT cannot do: O(log^2 n) point-update AND rectangle min / max / sum / gcd over a flat segment tree of segment trees), SortedArray (the read-optimized ordered map: O(log n) get / rank / successor / predecessor and O(1) select / keyAt / valueAt / min / max over two parallel sorted arrays, with O(n) in-place-shift writes disclosed), and PersistentSegTree (the family's FIRST persistent structure: a FULLY PERSISTENT / branching segment tree via path-copying -- update(fromVersion, i, value) returns a new version sharing every off-path subtree in O(log n), any past version stays queryable, over a monotonic bump/append node arena), and MergeSortTree (the family's FIRST truly IMMUTABLE member and FIRST offline range-RANK structure: a STATIC merge sort tree answering `countLE` -- how many values <= x in an index range -- and `rangeCount` -- how many in a value-window -- in worst-case O(log^2 n) over a segment tree of sorted runs in one flat array, O(n log n) build + space disclosed), and WaveletTree (the family's FIRST post-1.0 exotic: a STATIC wavelet MATRIX of level-wise flat bitvectors + a succinct O(1)-rank index that coordinate-compresses finite numbers to ranks, answering `access` / `rank` / `select` / `quantile` -- the k-th smallest value in an index range MergeSortTree deferred -- and `rangeCount` in worst-case O(log n), improving MergeSortTree's O(log^2 n) rangeCount, on the DEFAULT log2(n) axis; O(n log sigma) build + space disclosed), and CartesianTree (a STATIC, IMMUTABLE range-MINIMUM tree: a heap-ordered Cartesian tree built in O(n) whose `rangeMinIndex` / `rangeMin` answer the extreme's index / value over an index range in worst-case O(log n) via a binary-lifting LCA climb, with a materialized `parent` / `left` / `right` / `depth` topology you can walk -- the RMQ = LCA teaching bridge; O(n log n) lift table + space disclosed, on the DEFAULT log2(n) axis), and LinkCutTree (the family's FIRST dynamic-topology structure: a Sleator-Tarjan link-cut tree maintaining a FOREST of rooted trees under `link` / `cut` / `evert` with AMORTIZED O(log n) PATH aggregates -- min / max / sum / gcd, frozen at construction -- via a preferred-path splay decomposition, over a FIXED vertex set `[0, capacity)` where `link` / `cut` / `evert` flip EDGES only so no op allocates; because the folds are COMMUTATIVE, reversal (`evert`) is aggregate-invariant -- a lazy `_rev` bit, no mirrored aggregate; on the DEFAULT log2(n) axis) -- each zero-GC, each shipped with a log-linear Witness that fits `nsPerOp = intercept + slope*log2(n)` (or `slope*(log2 n)^2` for Fenwick2D / SegmentTree2D / MergeSortTree) and shows the straight log line while an O(n) foil leaves it.\n\n[![npm version](https://img.shields.io/npm/v/@zakkster/lite-logn.svg?style=for-the-badge&color=latest)](https://www.npmjs.com/package/@zakkster/lite-logn)\n[![sponsor](https://img.shields.io/badge/sponsor-PeshoVurtoleta-ea4aaa.svg?logo=github)](https://github.com/sponsors/PeshoVurtoleta)\n![Zero-GC](https://img.shields.io/badge/Zero--GC-Engine-00C853?style=for-the-badge&logo=leaf&logoColor=white)\n[![npm bundle size](https://img.shields.io/bundlephobia/minzip/@zakkster/lite-logn?style=for-the-badge)](https://bundlephobia.com/result?p=@zakkster/lite-logn)\n[![npm downloads](https://img.shields.io/npm/dm/@zakkster/lite-logn?style=for-the-badge&color=blue)](https://www.npmjs.com/package/@zakkster/lite-logn)\n[![npm total downloads](https://img.shields.io/npm/dt/@zakkster/lite-logn?style=for-the-badge&color=blue)](https://www.npmjs.com/package/@zakkster/lite-logn)\n![Tree-Shakeable](https://img.shields.io/badge/tree--shakeable-yes-brightgreen)\n![TypeScript](https://img.shields.io/badge/TypeScript-Types-informational)\n![Dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)\n[![license](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](./LICENSE)\n\n## The O(log n) toolkit the ecosystem was missing\n\nAlmost no JavaScript data-structure library ships the evidence that its Big-O claim survives contact with a real engine -- megamorphic call sites, GC pauses, cache misses, deopts. `lite-logn` is a curated, tree-shakeable family of the O(log n) structures that actually matter, each zero-GC, each written to teach the trick that buys the logarithm, and each shipped with a harness that DEMONSTRATES the straight log line rather than asserting it. The complexity class IS the product.\n\nlite-logn is the O(log n) sibling of [`@zakkster/lite-o1`](https://www.npmjs.com/package/@zakkster/lite-o1). lite-o1 proves a FLAT ops/ms line on a log-x axis (the constant -- slope ~ 0); lite-logn proves a STRAIGHT line on that same axis (one added level per doubling of `n` -- slope > 0, within a per-member band). The gate SHAPE differs; the discipline is identical: zero allocation on every hot path and a witness that turns \"trust me, it is O(log n)\" into a straight line you can see, with a foil that leaves it.\n\n**v1.4.0 ships nineteen members: BinaryHeap, Fenwick, SegmentTree, SkipList, Treap, Scapegoat, MinMaxHeap, SplayTree, BinomialHeap, PairingHeap, FibonacciHeap, Fenwick2D, SegmentTree2D, SortedArray, PersistentSegTree, MergeSortTree, WaveletTree, CartesianTree and LinkCutTree.** Members land one per session, each append-only so prior members stay byte-identical. The planned roster below fills in per release.\n\n```bash\nnpm install @zakkster/lite-logn\n```\n\n```js\nimport { Fenwick } from '@zakkster/lite-logn';\n\n// A Fenwick tree (Binary Indexed Tree): point-update AND prefix-sum both O(log n).\nconst f = new Fenwick(1000);   // 1000 slots, all zero\nf.update(10, 5);               // add 5 at index 10          -- O(log n)\nf.update(20, 3);               // add 3 at index 20          -- O(log n)\nf.prefix(15);        // -> 5   (sum of [0..15] inclusive)    -- O(log n)\nf.rangeSum(10, 20);  // -> 8   (sum of [10..20] inclusive)   -- O(log n)\nf.at(10);            // -> 5   (the single element at 10)    -- O(log n)\nf.set(10, 100);      // set index 10 to 100 (absolute)       -- O(log n)\nf.prefix(20);        // -> 103\n\n// O(n) LINEAR bulk build (each cell adds itself to its parent in one pass):\nconst g = Fenwick.build([1, 2, 3, 4, 5]);\ng.prefix(4);         // -> 15\n```\n\nEvery hot op allocates zero bytes after construction, and `npm run witness` proves BOTH `update` and `prefix` hold the straight log line while their O(n) foils (a prefix-array rebuild and a naive re-sum) leave it.\n\n---\n\n## Table of contents\n\n- [Why this exists](#why-this-exists)\n- [What you get](#what-you-get)\n- [The roster](#the-roster)\n- [The O(log n) Witness](#the-olog-n-witness)\n- [Benchmarks](#benchmarks)\n- [API reference](#api-reference)\n  - [Constants](#constants)\n  - [BinaryHeap](#binaryheap)\n  - [Fenwick](#fenwick)\n  - [SegmentTree](#segmenttree)\n  - [SkipList](#skiplist)\n  - [Treap](#treap)\n  - [Scapegoat](#scapegoat)\n  - [MinMaxHeap](#minmaxheap)\n  - [SplayTree](#splaytree)\n  - [BinomialHeap](#binomialheap)\n  - [PairingHeap](#pairingheap)\n  - [FibonacciHeap](#fibonacciheap)\n  - [Fenwick2D](#fenwick2d)\n  - [SegmentTree2D](#segmenttree2d)\n  - [SortedArray](#sortedarray)\n  - [PersistentSegTree](#persistentsegtree)\n  - [MergeSortTree](#mergesorttree)\n  - [WaveletTree](#wavelettree)\n  - [CartesianTree](#cartesiantree)\n  - [LinkCutTree](#linkcuttree)\n- [Zero-GC design notes](#zero-gc-design-notes)\n- [Testing](#testing)\n- [What this is not](#what-this-is-not)\n- [Ecosystem](#ecosystem)\n- [License](#license)\n\n---\n\n## Why this exists\n\nA working programmer reaching for \"keep the smallest element to hand\" or \"prefix sums that stay correct under updates\" usually pays an O(n) cost hidden behind a friendly method name -- `Array.prototype.shift`, a full re-sum, a re-sort on every insert. The logarithm is the honest price of order, and it is cheap: one extra level of work per doubling of the data. But a naive O(log n) structure does `new Node` per insert, and that per-op allocation is a GC pause an engine will not honor -- it turns the clean logarithm into jitter.\n\nlite-logn ships the O(log n) structures that matter with the allocation removed (array-embedded members are naturally node-free; pointer-based members use a pointer-free node pool) and the logarithm proven (the witness fits a straight log line and shows an O(n) foil leaving it). The complexity class is the product: you get the structure AND the evidence its bound is real on a real engine.\n\n## What you get\n\n- **Zero runtime dependencies.** ESM only, ASCII-only source, one PascalCase main file (`LogN.js`), `sideEffects: false`.\n- **Zero allocation on every hot path.** Proven by `node --expose-gc test/torture.mjs` (`@zakkster/lite-leak` + `@zakkster/lite-gc-profiler`): 0 B/op, `gc major = 0`, leak tracker `size 0/0`.\n- **A logarithm you can see.** `npm run witness` fits `nsPerOp = intercept + slope*log2(n)` across a geometric `n` sweep, gates the `R^2` floor + slope band, and shows an O(n) foil departing the line.\n- **Tree-shakeable named exports.** Members share no mutable module state, so a bundler that imports one drops the others.\n- **Fail closed.** Fixed, preallocated capacity; a `typeof`-guard at the door of every mutating op; `null` is not zero; an unknown option key is an error with a hint, never a silent ignore.\n\n## The roster\n\nOne member per session, each landing append-only (prior members stay byte-identical). At v1.4.0, nineteen members -- BinaryHeap, Fenwick, SegmentTree, SkipList, Treap, Scapegoat, MinMaxHeap, SplayTree, BinomialHeap, PairingHeap, FibonacciHeap, Fenwick2D, SegmentTree2D, SortedArray, PersistentSegTree, MergeSortTree, WaveletTree, CartesianTree and LinkCutTree -- are shipped.\n\n| Member | Version | Status | Shape | Hot ops |\n| --- | --- | --- | --- | --- |\n| **BinaryHeap** | 0.1.0 | shipped | array-embedded complete binary min|max heap over a flat `Float64Array` | `push` / `pop` O(log n), `peek` O(1) |\n| **Fenwick** (BIT) | 0.2.0 | shipped | flat `Float64Array`, lowest-set-bit walk (`i & -i`) | `update` / `prefix` / `rangeSum` / `at` / `set` O(log n) |\n| **SegmentTree** | 0.3.0 | shipped | single flat `Float64Array(2n)` (leaves n..2n-1); associative fold (min/max/sum/gcd) chosen at construction | `query` / `update` O(log n), `at` O(1) |\n| **SkipList** | 0.4.0 | shipped | pointer-free over a private free-list node pool; expected O(log n) | `get` / `set` / `delete` / `successor` / `predecessor` |\n| **Treap** | 0.5.0 | shipped | randomized-balanced augmented BST over the same node pool; expected O(log n) | `get` / `has` / `set` / `delete` / `rank` / `select` / `successor` / `predecessor` / `forEach` / `rangeIter` / `split` + `merge` |\n| **Scapegoat** | 0.6.0 | shipped | DETERMINISTIC weight-balanced augmented BST over the same node pool; worst-case O(log n) get, amortized O(log n) set/delete (zero-GC rebuild) | `get` / `has` / `set` / `delete` / `rank` / `select` / `successor` / `predecessor` / `forEach` / `rangeIter` (NO split/merge) |\n| **MinMaxHeap** | 0.7.0 | shipped | array-embedded double-ended PQ (DEPQ): one binary heap whose levels alternate min/max, two flat columns (`_key`/`_id`) | `push` / `popMin` / `popMax` O(log n), `peekMin` / `peekMax` / `peekMinKey` / `peekMaxKey` O(1) (non-addressable: NO changeKey/remove) |\n| **SplayTree** | 0.8.0 | shipped | self-adjusting BST ordered map: iterative top-down splay, four flat columns (`_key`/`_value`/`_left`/`_right`) over the shared free-list, NO balance metadata | `get` / `has` / `set` / `delete` / `successor` / `predecessor` amortized O(log n) (a read SPLAYS); LEAN (NO rank/select/split/merge) |\n| **BinomialHeap** | 0.9.0 | shipped | mergeable priority queue: a forest of binomial trees, six flat columns (`_key`/`_id`/`_parent`/`_child`/`_sibling`/`_order`) over a shared-arena free-list | `push` O(1) amortized, `popMin` O(log n), `peekMin`/`peekMinKey` O(1), `meld` O(log n) (consumes the arg); LEAN + non-addressable (NO decreaseKey/remove/rank/select) |\n| **PairingHeap** | 0.10.0 | shipped | ADDRESSABLE mergeable priority queue: a single multi-way tree (left-child/right-sibling), five flat columns (`_key`/`_id`/`_child`/`_sibling`/`_parent`) + arena-wide `_pos` reverse map + per-slot `_owner` + union-find `_alias`, over a shared-arena free-list | `push`/`meld` O(1), `popMin`/`decreaseKey`/`remove` amortized O(log n), `peekMin`/`peekMinKey`/`has`/`keyOf` O(1); ADDRESSABLE by arena-wide-unique id (NO rank/select/changeKey) |\n| **FibonacciHeap** | 0.11.0 | shipped | textbook-optimal ADDRESSABLE mergeable PQ: a lazy forest on CIRCULAR lists, eight flat columns (`_key`/`_id`/`_left`/`_right`/`_child`/`_parent`/`_degree`/`_mark`) + arena-wide `_pos` + `_owner` + `_alias` + a per-arena degree bucket, over a shared-arena free-list | `push`/`meld`/`decreaseKey` O(1) amortized (cascading cuts + mark bit), `popMin`/`remove` O(log n) amortized (degree consolidation), `peekMin`/`peekMinKey`/`has`/`keyOf` O(1); ADDRESSABLE by arena-wide-unique id (NO rank/select/changeKey); textbook-optimal but OFTEN slower wall-clock than Pairing/Binary |\n| **Fenwick2D** | 0.12.0 | shipped | 2D Binary Indexed Tree: a single flat `Float64Array((rows+1)*(cols+1))`, nested lowest-set-bit walk (`i & -i` on both dims), row 0 / col 0 the identity sentinels | `update` / `prefix` / `rectSum` / `at` / `set` O(log^2 n) = O(log rows * log cols); `rows` / `cols` O(1); SUM-ONLY + index-addressed (NO 2D min/max/gcd, NO changeKey/rank/select) |\n| **SegmentTree2D** | 0.13.0 | shipped | 2D segment tree of segment trees: a single flat `Float64Array(4*rows*cols)` (2R x 2C), associative fold (min/max/sum/gcd) chosen at construction; the general rectangle fold a 2D BIT cannot do | `query` / `update` O(log^2 n) = O(log rows * log cols); `at` O(1); `rows` / `cols` / `kind` O(1); index-addressed range FOLD (NO changeKey/rank/select, NO lazy range-update, commutative folds only) |\n| **SortedArray** | 0.14.0 | shipped | DYNAMIC read-optimized ordered map (key -> value) over two parallel SORTED `Float64Array` columns (`_key` ascending / `_value`); CONTIGUOUS storage, one shared lower-bound search | `get` / `has` / `rank` / `successor` / `predecessor` O(log n); `select` / `keyAt` / `valueAt` / `min` / `max` O(1); `set` / `delete` O(n) in-place `copyWithin` shift (0 B/op); the fastest `forEach` (a cache-friendly scan); unique keys (NO duplicate, NO changeKey) |\n| **PersistentSegTree** | 0.15.0 | shipped | FULLY PERSISTENT (branching) segment tree via PATH-COPYING: a persistent DAG of immutable nodes over three flat columns (`_val` Float64 / `_left` / `_right` Uint32) via a monotonic BUMP/APPEND allocator (NOT the free-list pool); associative fold (min/max/sum/gcd) chosen at construction | `query` / `at` O(log n) read-only; `update(fromVersion, i, value) -> newVersion` O(log n) (copies the root-to-leaf path, shares off-path subtrees, 0 B/op); every past version stays queryable + branchable; `length` / `versions` / `versionCapacity` / `kind` O(1); the family's FIRST persistent member (NO forEach/iterator -- a persistent DAG has no single live timeline) |\n| **MergeSortTree** | 0.16.0 | shipped | STATIC, IMMUTABLE offline range-RANK tree: a segment tree of SORTED runs packed by level into ONE flat `Float64Array` of `n*(ceil(log2 n)+1)` cells; source COPIED in at construction, NO mutators (the family's FIRST truly immutable member) | `countLE(lo, hi, x)` (how many values <= x in an index range) / `rangeCount(lo, hi, vlo, vhi)` (count in a value-window) worst-case O(log^2 n), 0 B/op read-only; `length` / `size` / `cells` O(1); PLAIN O(log^2 n) (no fractional cascading); kth-in-range deferred to a future WaveletTree; O(n log n) build + space disclosed (NO forEach/mutator -- static + immutable) |\n| **WaveletTree** | 1.1.0 | shipped | STATIC wavelet MATRIX: level-wise flat bitvectors (`n*ceil(log2 distinct)` bits) + per-level zero-count + a succinct O(1)-rank block index; coordinate-compresses finite numbers to distinct ranks at build; source COPIED in, immutable per query with NO per-element mutator -- the one exception is `rebuildFrom`, a whole-structure atomic rebuild in place | `access(i)` (value at index) / `rank(value, i)` (occurrences in prefix `[0, i)`) / `select(value, k)` (index of k-th occurrence) / `quantile(lo, hi, k)` (k-th smallest value in an index range -- the order statistic MergeSortTree deferred) / `quantileInto(out, j, lo, hi, k)` (0-box) / `rangeCount(lo, hi, vlo, vhi)` (value-window count) all worst-case O(log n), 0 B/op read-only; `rebuildFrom(values)` rebuilds in place; `length` / `size` / `levels` / `distinct` / `bits` O(1); DEFAULT log2(n) witness axis; rangeCount improves MergeSortTree's O(log^2 n) to O(log n); O(n log sigma) build + space disclosed (no per-element mutator / forEach) |\n| **CartesianTree** | 1.2.0 | shipped | STATIC, IMMUTABLE range-MINIMUM tree: a heap-ordered Cartesian tree built in O(n) (a monotonic-stack pass) + a flat `n*(ceil(log2 n)+1)` binary-lifting ancestor table; source COPIED in, `kind` (`min`/`max`) frozen at build, NO mutators | `rangeMinIndex(lo, hi)` (index of the extreme in an index range -- the gated op) / `rangeMin(lo, hi)` (its value) worst-case O(log n) via an LCA climb, 0 B/op; `at(i)` / `parent(i)` / `left(i)` / `right(i)` / `depth(i)` / `root` / `length` / `size` / `kind` O(1); DEFAULT log2(n) witness axis; RMQ = LCA the teaching bridge; O(n) build + O(n log n) lift + space disclosed (NO forEach/mutator -- static + immutable) |\n| **LinkCutTree** | 1.3.0 | shipped | the family's FIRST dynamic-topology structure: a Sleator-Tarjan link-cut tree -- a FOREST of rooted trees over a FIXED vertex set `[0, capacity)`, preferred-path splay decomposition, eight flat columns, `kind` (`min`/`max`/`sum`/`gcd`) frozen at build; `link` / `cut` / `evert` flip EDGES only, NO per-op allocation / free-list / bump allocator | `pathAggregate(u)` (fold root -> u) / `pathAggregate(u, v)` (fold the `u..v` path inclusive -- the gated op) amortized O(log n), 0 B/op; `link(child, parent)` / `cut(node)` / `evert(u)` / `setValue(id, value)` amortized O(log n); `findRoot(u)` / `connected(u, v)` amortized O(log n) MUTATING reads; `at(id)` O(1) NON-mutating; `clear()` O(n); `capacity` / `kind` / `edges` getters O(1); DEFAULT log2(n) witness axis; AMORTIZED, MAX single-op disclosed not gated; PATH-only (subtree folds deferred to a future EulerTourTree) |\n\nLater tiers (OrderStatTree, IndexedHeap, and presets) are queued in [`ROADMAP.md`](./ROADMAP.md).\n\n## The O(log n) Witness\n\nThe family anchor. Time a fixed batch of the hot op at each `n` in a geometric sweep, fit `nsPerOp = intercept + slope * log2(n)` by least squares, and gate:\n\n- `R^2 >= floor` (a straight line fits -- genuinely logarithmic), AND\n- `slope` inside the member's band (the per-level cost, ns/level), AND\n- the FOIL leaves the line (low `R^2` -- the O(n) default a working programmer reaches for, shown losing as `n` grows).\n\n<details>\n<summary>Per-op witness numbers -- all 24 gated lanes (R^2, slope, band, sweep) and the max-single-op disclosures.</summary>\n\nFor amortized / randomized members the witness also prints the MAX single-op time -- the honesty hook: a rebuild spike or a degenerate tail shows as a tall bar even when the mean still fits the line. The `R^2` floor (0.958) is frozen family-wide in BinaryHeap; each member then calibrates its OWN per-op slope band (median-of-15 fit-runs x `[0.6, 1.4]`), because a cheaper op honestly has a lower per-level slope (see [`decisions/0004-witness-band.md`](./decisions/0004-witness-band.md)). As of v1.4.0 the witness gates twenty-four ops (five bands -- SegmentTree `update`, SegmentTree2D `update`, PersistentSegTree `query`, Fenwick `prefix`, Fenwick2D `update` -- re-centered from their 1.3.0 values after F4 / the iterative `_query` removed a per-level HeapNumber box, so those ops are legitimately faster; see [`decisions/0004-witness-band.md`](./decisions/0004-witness-band.md)): BinaryHeap `pop` (R^2 ~ 0.99, slope ~ 8-10 ns/level), Fenwick `update` (R^2 ~ 0.98-0.99, slope ~ 2.9-3.0 ns/level) and `prefix` (R^2 ~ 0.99, slope ~ 0.88 ns/level, band `[0.53, 1.23]`, re-centered 1.4.0), SegmentTree `update` (R^2 ~ 0.98, slope ~ 0.72 ns/level, band `[0.43, 1.00]`) and `query` (R^2 ~ 0.99, slope ~ 7 ns/level, band `[4.30, 10.04]`), SkipList `get` (R^2 ~ 0.97-0.99, slope ~ 9 ns/level, band `[5.27, 12.30]`) and `set` (R^2 ~ 0.97-0.99, slope ~ 14 ns/level, band `[8.36, 19.50]`), Treap `get` (R^2 ~ 0.99, slope ~ 4 ns/level, band `[2.55, 5.95]`), Scapegoat `get` (R^2 ~ 0.99, slope ~ 4 ns/level, band `[2.41, 5.63]`), MinMaxHeap `popMin` (R^2 ~ 0.99, slope ~ 10.3 ns/level, band `[6.18, 14.42]`), SplayTree `get` (R^2 ~ 0.98, slope ~ 27 ns/level, band `[16.39, 38.24]`, sweep `[2^12, 2^17]`), BinomialHeap `popMin` (R^2 ~ 0.98, slope ~ 44.8 ns/level, band `[26.89, 62.75]`, sweep `[2^11, 2^17]`), PairingHeap `popMin` (R^2 ~ 0.99 median-of-5 fits, slope ~ 21.4 ns/level, band `[13.08, 30.52]`, sweep `[2^11, 2^17]`), FibonacciHeap `popMin` (R^2 ~ 0.98 median-of-7 fits, slope ~ 45 ns/level, band `[27.18, 63.41]`, sweep `[2^11, 2^17]`), and -- on the family's FIRST squared-log axis (`nsPerOp = intercept + slope*(log2 n)^2`) -- Fenwick2D `update` (R^2 ~ 0.998 median-of-7 fits, slope ~ 3.3 ns/level^2, band `[1.19, 4.62]`, bimodal -- see 0004, square sides `[2^5, 2^11]`) and `rectSum` (R^2 ~ 0.9998, slope ~ 4.4 ns/level^2, band `[2.90, 6.77]`), and -- the SECOND member on that squared-log axis -- SegmentTree2D `update` (R^2 ~ 0.99, slope ~ 2.55 ns/level^2, band `[1.53, 3.57]`, square sides `[2^5, 2^11]`) and `query` (R^2 ~ 0.9999, slope ~ 5.8 ns/level^2, band `[3.06, 7.15]`; both single-fit, rock-steady, no median-of-fits needed), and -- back on the DEFAULT log2(n) axis -- SortedArray `get` (R^2 ~ 0.98 median-of-7 fits, slope ~ 1.0 ns/level, band `[0.59, 1.38]`, sweep `[2^12, 2^18]`), and -- also on the DEFAULT log2(n) axis -- PersistentSegTree `query` (R^2 ~ 0.98, slope ~ 15.9 ns/level, band `[9.53, 22.23]`, sweep `[2^11, 2^17]`), and -- the family's THIRD member on the squared-log axis (`nsPerOp = intercept + slope*(log2 n)^2`) -- MergeSortTree `countLE` (R^2 ~ 0.97 median-of-7 fits, slope ~ 5.2 ns/level^2, band `[3.13, 7.31]`, sweep `[2^13, 2^18]`), and -- back on the DEFAULT log2(n) axis, the family's FIRST post-1.0 exotic -- WaveletTree `quantile` (R^2 ~ 0.97 median-of-7 fits, slope ~ 15.2 ns/level, band `[9.15, 21.35]`, sweep `[2^12, 2^18]`), and -- also on the DEFAULT log2(n) axis -- CartesianTree `rangeMinIndex` (R^2 ~ 0.98 median-of-7 fits, slope ~ 2.8 ns/level, band `[1.69, 3.93]`, sweep `[2^12, 2^18]`), and -- also on the DEFAULT log2(n) axis, the family's FIRST DYNAMIC-topology and FIRST amortized-dynamic member -- LinkCutTree `pathAggregate` (R^2 ~ 0.99 median-of-7 fits, slope ~ 56 ns/level, band `[33.74, 78.74]`, sweep `[2^12, 2^18]`) all ON the line. PersistentSegTree is the family's FIRST persistent / branching member: its `query` is a WORST-CASE O(log n) read-only descent over a version's root (independent of which version is read -- all versions share the same height), so it fits the default single-log axis; because a persistent path-copying query chases scattered bump-allocated slots across the node arena, its per-level slope sits with the pointer-chasing members and its post-torture run has genuine scheduler / thermal residue, so this lane opts into the MEDIAN of 7 independent sweep-fits as measurement-quality insurance (the frozen 0.958 floor and slope band are untouched). Its O(n) linear-scan foil leaves the line. WORST-CASE member: no max-single-op line. MergeSortTree is the family's FIRST truly IMMUTABLE member and its offline range-RANK structure: its `countLE` is a WORST-CASE O(log^2 n) descent of the O(log n) canonical nodes covering the index range, each binary-searching that node's sorted run, so it fits the SAME squared-log axis Fenwick2D / SegmentTree2D use; because it chases scattered node runs across a large flat table, a single sweep-fit's R^2 can dip below the floor in a minority of runs, so this lane opts into the MEDIAN of 7 independent sweep-fits (the frozen 0.958 floor + slope band are untouched). Its O(n) linear-scan-count foil is exponential on the squared-log axis and leaves the line. STATIC + WORST-CASE (build-once immutable, no randomization / amortization): no max-single-op line. WaveletTree is the family's FIRST post-1.0 exotic and its wavelet MATRIX: its `quantile` is a WORST-CASE O(log sigma) SINGLE descent of the `ceil(log2 distinct)` levels with O(1) succinct-rank work per level, so unlike MergeSortTree's per-node binary search it fits the DEFAULT single-log axis (`nsPerOp = intercept + slope*log2(n)`); because a quantile descent reads TWO succinct ranks per level across the level-packed bitvectors + rank index, a single sweep-fit's R^2 can dip below the floor in a minority of post-torture runs, so this lane opts into the MEDIAN of 7 independent sweep-fits (the frozen 0.958 floor + slope band are untouched). Its O(n log n) linear-kth foil (copy the window, sort, index k) leaves the line. STATIC + WORST-CASE (build-once immutable, no randomization / amortization): no max-single-op line. CartesianTree is the family's range-MINIMUM tree and its binding of the RMQ = LCA bridge: its `rangeMinIndex` is a WORST-CASE O(log n) binary-lifting LCA climb (depth-equalize `lo` and `hi`, then co-lift in lock-step over the flat ancestor table), so it fits the DEFAULT single-log axis (`nsPerOp = intercept + slope*log2(n)`) with the family's SHALLOWEST-but-one per-level slope (each jump is a single `_up` array read, no per-op value compare -- `kind` is baked into the tree); because the climb reads scattered ancestor cells and its post-torture run carries scheduler / thermal residue, this lane opts into the MEDIAN of 7 independent sweep-fits (the frozen 0.958 floor + slope band are untouched). Its O(n) linear extreme-scan foil leaves the line. STATIC + WORST-CASE (build-once immutable, no randomization / amortization): no max-single-op line. LinkCutTree is the family's FIRST dynamic-topology member and its binding of the preferred-path splay decomposition: its `pathAggregate` is an AMORTIZED O(log n) single splay descent that folds a root-to-node (or evert-then-access two-endpoint) path over the preferred-path splay forest -- each preferred path a splay tree keyed by depth, path-parent pointers stitching the paths -- so it fits the DEFAULT single-log axis (`nsPerOp = intercept + slope*log2(n)`); because a single access can splay + expose a deep chain, the witness prints the MAX single `pathAggregate` as a disclosure, never gated (the SplayTree / PairingHeap / FibonacciHeap amortized precedent). It is measured over a UNIFORM-RANDOM working set of size n (a shuffled permutation of all n vertices, cycled -- SplayTree.get's discipline) so every op re-prefers a fresh path and the amortized line shows; its per-level slope band was calibrated on a warm post-torture median (~56 ns/level, band `[33.74, 78.74]`), the state `npm run verify` runs in. Because the folds (min / max / sum / gcd) are COMMUTATIVE, reversal (`evert`) is aggregate-invariant -- it swaps children and flips a lazy `_rev` bit, no mirrored aggregate is kept. This lane opts into the MEDIAN of 7 independent sweep-fits (the frozen 0.958 floor + slope band are untouched). Its O(depth) naive parent-walk foil is O(n) on a deep chain and leaves the line. SortedArray is the family's READ-OPTIMIZED ordered map: its `get` is a WORST-CASE O(log n) contiguous lower-bound binary search (the deterministic Scapegoat.get analogue, no RNG), the family's SHALLOWEST per-level slope because a contiguous search touches fewer cache lines per level than a pointer-chasing BST descent -- so this being the fastest lane, its ~6 ns fit span needs the widest + highest n-sweep and a 1e6-iteration measurement to keep per-point noise off the fit; the median-of-7 fit is measurement-quality insurance against the scheduler/thermal residue of the post-torture run (the frozen 0.958 floor and slope band are untouched). Because a genuine insert is an O(n) tail shift, the witness also prints the MAX single insert as a disclosure, never gated. FibonacciHeap is the mergeable arc's FINALE -- the textbook-optimal ADDRESSABLE heap: `push`/`meld`/`decreaseKey` are O(1) AMORTIZED (a cascading cut governed by a per-node mark bit) and `popMin`/`remove` are O(log n) AMORTIZED (a degree consolidation), and because a single popMin can do an O(n) consolidation and a single decreaseKey an O(n) cascade the witness prints BOTH the MAX single popMin AND the MAX single decreaseKey as disclosures, never gated. It carries the FAMILY's STEEPEST per-level slope (a lazy forest consolidated on demand -- the largest constant factors of any heap here); honestly, it is textbook-optimal in asymptotics but OFTEN slower wall-clock than Pairing/Binary on real hardware. Its full-drain average has even more run-to-run SHAPE variance than the pairing two-pass, so a single sweep-fit's R^2 is flaky (~0.981-0.988, and can dip below the floor across meta-runs); this lane gates on the MEDIAN of 7 independent sweep-fits -- measurement-quality only, the frozen 0.958 floor and slope band are untouched, and no unreproducible \"every run\" is claimed. PairingHeap is the mergeable arc's ADDRESSABLE heap: its `popMin` is AMORTIZED O(log n) (a TWO-PASS combine of the root's child list -- pointer-free, 0 B/op), and because a single pop can fold a long child list the witness prints the MAX single popMin as a disclosure, never gated; its per-level slope sits between the array-embedded heaps and BinomialHeap (a single multi-way tree, not a forest). A pairing-heap full-drain average has genuine run-to-run SHAPE variance, so a single sweep-fit's R^2 is flaky (~0.945-0.985, dipping below the floor in a minority of runs); this lane gates on the MEDIAN of 5 independent sweep-fits (rejecting the occasional tilted sweep) -- measurement-quality only, the frozen 0.958 floor and slope band are untouched. BinomialHeap is the family's first MERGEABLE heap: its `popMin` is WORST-case O(log n) (unlink the extreme root, reverse its child list, union back, rescan the roots -- no max-single-op line), and its per-level slope sits well above the array-embedded heaps because it chases scattered forest slots (which is why it is gated over the cache-resident exact-power window, not the [1e4, 1e6] band). SplayTree is DETERMINISTIC and SELF-ADJUSTING: its `get` is AMORTIZED O(log n) (a read SPLAYS the touched key to the root -- the slope sits well above a read-only BST descent because rotations rewrite links every op), measured over a uniform-random working set of size n so the amortized line shows (a skewed pattern would flatten it -- the member's speedup, not what a straight-log witness measures); because a single cold access can splay an O(n) chain, the witness also prints the MAX single get as a disclosure, never gated. Scapegoat is DETERMINISTIC, so its `get` is WORST-case (not expected) O(log n); its rebuild spike lives on the AMORTIZED `set` path and is proven not by a per-op line but by an amortized-trace assertion -- the cumulative ascending-insert (rebuild-heavy) cost/op tracks a LOG curve (last/first ratio ~1.5x over `[2^11, 2^17]`, gated `< 4x`) where a rebuild-less BST would degenerate to an O(n)-amortized chain and blow the ratio to ~64x. Treap's descent touches one node per level, so its per-level slope is lower than SkipList's tower search -- expected, which is why only the R^2 floor is shared and each op calibrates its own band. SkipList's two ops are gated over DIFFERENT sweeps -- each measured where its logarithm is visible, not where the cache wall is: `get` (a clean search with no per-op randomness) over `[2^11, 2^17]` for dynamic range; `set` (a heavier insert+delete churn whose per-insert tower height is random) over the smaller, fully cache-resident `[2^9, 2^14]` so the fit sees the structural level count, not DRAM latency. Because SkipList is EXPECTED (not worst-case) O(log n), the witness also prints the MAX single insert over a realistic randomized build trace -- the unlucky-tower tail a mean hides. Each op's O(n) foil fits well below the floor: the sorted-array insert (BinaryHeap / SkipList) foil runs R^2 ~ 0.77-0.87, the Fenwick foils (prefix-array rebuild, naive re-sum) and SkipList's linear-scan search foil hold at R^2 ~ 0.75-0.82, and SegmentTree's foils (whole-tree rebuild per update, scan-fold per query) fit at R^2 ~ 0.72-0.85 -- all foil families sit comfortably under the 0.958 floor.\n\n</details>\n\n## Benchmarks\n\nA repo-only, eight-dimension benchmark suite (`benchmark/`, ADOPTED field-for-field from `@zakkster/lite-o1`'s \"Bench v2\") surrounds the witness anchor. It is dev infra: NOT in the published tarball, imports NOTHING from the package but `LogN.js`, and spawns one child process per `(member x dimension)` cell for a clean GC/JIT state. **D1 is the O(log n) Witness itself** -- it DELEGATES to the shipped `test/witness.mjs` (the same frozen kernels, per-op sweeps, `R^2` floor and slope bands), so the headline dimension never re-implements the fit. Run it yourself:\n\n```sh\nnpm run bench            # 128 cells -> benchmark/results.json + summary tables\nnpm run bench:report     # the above, then benchmark/report.html (hand-rolled inline-SVG graphs)\n```\n\nNumbers below are one run on an Apple M4 Pro (arm64), Node v26 -- machine-specific, reproducible from a fixed seed (`0x9e3779b1`). Every applicable cell is a positive number; every inapplicable cell is the string `n/a` (never a numeric 0).\n\n### D1 -- the O(log n) Witness fit (per gated op-row)\n\nEach op fits `nsPerOp = intercept + slope*log2(n)`. ON-LINE = `R^2 >= 0.958` (the frozen family floor) AND `slope` inside the member's per-op band; the O(n) foil MUST leave the line (`foil R^2 < 0.958`). All twenty-four op-rows sit ON the line; all twenty-four foils leave it.\n\n<svg width=\"640\" height=\"200\" viewBox=\"0 0 640 200\" role=\"img\" aria-label=\"D1 slope per op-row (ns/level)\" xmlns=\"http://www.w3.org/2000/svg\">\n  <text x=\"8\" y=\"16\" font-size=\"12\" fill=\"#475569\">D1 slope (ns/level) -- lower is a cheaper per-level cost</text>\n  <g font-size=\"10\" fill=\"#334155\" text-anchor=\"middle\">\n    <rect x=\"24\"  y=\"84\"  width=\"60\" height=\"96\"  fill=\"#2563eb\"/><text x=\"54\"  y=\"194\">BH.pop 8.4</text>\n    <rect x=\"112\" y=\"148\" width=\"60\" height=\"32\"  fill=\"#059669\"/><text x=\"142\" y=\"194\">Fen.upd 2.8</text>\n    <rect x=\"200\" y=\"150\" width=\"60\" height=\"30\"  fill=\"#059669\"/><text x=\"230\" y=\"194\">Fen.pre 2.6</text>\n    <rect x=\"288\" y=\"145\" width=\"60\" height=\"35\"  fill=\"#d97706\"/><text x=\"318\" y=\"194\">Seg.upd 3.1</text>\n    <rect x=\"376\" y=\"99\"  width=\"60\" height=\"81\"  fill=\"#d97706\"/><text x=\"406\" y=\"194\">Seg.qry 7.0</text>\n    <rect x=\"464\" y=\"88\"  width=\"60\" height=\"92\"  fill=\"#7c3aed\"/><text x=\"494\" y=\"194\">SL.get 8.0</text>\n    <rect x=\"552\" y=\"40\"  width=\"60\" height=\"140\" fill=\"#7c3aed\"/><text x=\"582\" y=\"194\">SL.set 12.1</text>\n  </g>\n</svg>\n\n| op-row | `R^2` | slope (ns/level) | slope band | on line? | foil | foil `R^2` | foil off? |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| `BinaryHeap.pop` | 0.996 | 8.4 | `[5.76, 13.44]` | ON | sorted-array insert | 0.83 | off |\n| `Fenwick.update` | 0.980 | 2.8 | `[1.84, 4.30]` | ON | prefix-array rebuild | 0.76 | off |\n| `Fenwick.prefix` | 0.99 (median-of-9 fits) | 0.88 | `[0.53, 1.23]` | ON | naive re-sum | 0.75 | off |\n| `SegmentTree.update` | 0.98 | 0.72 | `[0.43, 1.00]` | ON | whole-tree rebuild | 0.82 | off |\n| `SegmentTree.query` | 0.998 | 7.0 | `[4.30, 10.04]` | ON | scan-fold | 0.73 | off |\n| `SkipList.get` | 0.988 | 8.0 | `[5.27, 12.30]` | ON | linear scan | 0.79 | off |\n| `SkipList.set` | 0.985 | 12.1 | `[8.36, 19.50]` | ON | sorted-array insert | 0.77 | off |\n| `Treap.get` | 0.988 | 4.0 | `[2.55, 5.95]` | ON | linear scan | 0.79 | off |\n| `Scapegoat.get` | 0.988 | 3.8 | `[2.41, 5.63]` | ON | linear scan | 0.79 | off |\n| `MinMaxHeap.popMin` | 0.99 | 10.3 | `[6.18, 14.42]` | ON | linear min-scan-and-splice | 0.77 | off |\n| `SplayTree.get` | 0.98 | 27.3 | `[16.39, 38.24]` | ON | linear scan | 0.80 | off |\n| `BinomialHeap.popMin` | 0.98 | 44.8 | `[26.89, 62.75]` | ON | linear min-scan-and-splice | 0.77 | off |\n| `PairingHeap.popMin` | 0.99 (median-of-5 fits) | 21.4 | `[13.08, 30.52]` | ON | linear min-scan-and-splice | 0.79 | off |\n| `FibonacciHeap.popMin` | 0.98 (median-of-7 fits) | 45.3 | `[27.18, 63.41]` | ON | linear min-scan-and-splice | 0.90 | off |\n| `Fenwick2D.update` | 0.99 (median-of-fits) | 3.3 (bimodal ~2.0 / ~3.3) | `[1.19, 4.62]` | ON | dense rectangle rescan | 0.80 | off |\n| `Fenwick2D.rectSum` | 0.99 | 4.8 | `[2.90, 6.77]` | ON | dense rectangle rescan | 0.80 | off |\n| `SegmentTree2D.update` | 0.99 | 2.55 | `[1.53, 3.57]` | ON | 2D grid rebuild | 0.80 | off |\n| `SegmentTree2D.query` | 0.9999 | 5.8 | `[3.06, 7.15]` | ON | dense rectangle rescan | 0.80 | off |\n| `SortedArray.get` | 0.98 (median-of-7 fits) | 1.0 | `[0.59, 1.38]` | ON | linear scan | 0.78 | off |\n| `PersistentSegTree.query` | 0.98 | 15.9 | `[9.53, 22.23]` | ON | scan-fold | 0.70 | off |\n| `MergeSortTree.countLE` | 0.97 (median-of-7 fits) | 6.8 | `[3.13, 7.31]` | ON | linear scan-count | 0.86 | off |\n| `WaveletTree.quantile` | 0.97 (median-of-7 fits) | 15.2 | `[9.15, 21.35]` | ON | linear-kth (sort window) | 0.85 | off |\n| `CartesianTree.rangeMinIndex` | 0.98 (median-of-7 fits) | 2.8 | `[1.69, 3.93]` | ON | linear extreme-scan (O(n)) | 0.80 | off |\n| `LinkCutTree.pathAggregate` | 0.99 (median-of-7 fits) | 56 | `[33.74, 78.74]` | ON | naive parent-walk (O(depth)/O(n)) | 0.80 | off |\n\n**Fenwick2D squared-log axis (the family's FIRST).** Fenwick2D's ops are O(log^2 n), not O(log n), so its two witness lanes fit `nsPerOp = intercept + slope*(log2 n)^2` -- the slope column above for `Fenwick2D.update` / `Fenwick2D.rectSum` is therefore ns per `(log2 n)^2` UNIT (not per level), gated over exact power-of-two square sides `2^5..2^11`. The per-lane `xOf` axis hook that makes this possible defaults to `Math.log2`, so every prior lane's fit is byte-identical. Each O(n^2)-per-op foil (a dense rectangle rescan) leaves the squared-log line. Fenwick2D is WORST-case (no MAX-single-op disclosure).\n\n**Scapegoat amortized-trace (the rebuild honesty).** Scapegoat's `get` is WORST-case O(log n) (a deterministic weight-balance height bound), so it carries no expected-op MAX-single-op disclosure. The rebuild spike lives on the AMORTIZED `set` path; D1 proves the amortization not with a per-op line but with an amortized-trace assertion -- the cumulative ascending-insert (rebuild-heavy) cost/op tracks a LOG curve (last/first ratio `~1.5x` over `[2^11, 2^17]`, gated `< 4x`) where a rebuild-less BST would blow to `~64x`.\n\n**SkipList counter-foil (the order tax).** A native `Map` is O(1) at get/set (`~27 ns/op`, FLATTER than any log line) but ORDER-BLIND: it cannot answer `successor` / `predecessor` / `rangeIter`. The log factor SkipList pays buys exactly the ordered queries Map cannot. SkipList is EXPECTED O(log n), so D1 also DISCLOSES its MAX single insert (an unlucky tall tower over a randomized build: `~18-130 us`, not gated).\n\n### D3 -- memory (bytes / live vs a theoretical floor)\n\n| member | peak bytes @ 64Ki | B/live | theo min | overhead x | note |\n| --- | --- | --- | --- | --- | --- |\n| BinaryHeap | 1,048,576 | 16.0 | 12 | 1.33 | key (8) + id (4) dense; `_pos` reverse map is the universe overhead |\n| Fenwick | 524,296 | 8.0 | 8 | 1.00 | one `Float64` tree cell per element -- exact |\n| SegmentTree | 1,048,576 | 16.0 | 16 | 1.00 | the `2n` array -- exact |\n| SkipList | 5,767,320 | 88.0 | 16 | 5.50 | key + value dense; the `ceil(log2 cap)+1` link columns are the tower overhead |\n| Treap | 2,359,328 | 36.0 | 16 | 2.25 | key + value + priority + child/parent + subtree-size per node |\n| Scapegoat | 2,621,472 | 40.0 | 16 | 2.50 | key + value + child links + subtree-size counters per node |\n| MinMaxHeap | 786,432 | 12.0 | 12 | 1.00 | key (8) + id (4) dense, no reverse map -- exact |\n| SplayTree | 1,835,032 | 28.0 | 16 | 1.75 | key + value + child/parent pointers per node |\n| BinomialHeap | 2,097,180 | 32.0 | 12 | 2.67 | key + child/sibling/parent forest pointers per node |\n| PairingHeap | 2,359,324 | 36.0 | 12 | 3.00 | key + child/sibling/prev pointers per node |\n| FibonacciHeap | 2,949,261 | 45.0 | 12 | 3.75 | key + child/sibling/parent + degree/mark per node -- the steepest store |\n| Fenwick2D | 528,392 | 8.1 | 8 | 1.01 | one `Float64` cell per grid element -- near-exact |\n| SegmentTree2D | 2,097,152 | 32.0 | 32 | 1.00 | the `2n x 2n` grid -- exact |\n| SortedArray | 1,048,576 | 16.0 | 16 | 1.00 | key + value dense contiguous -- exact |\n| PersistentSegTree | 2,114,820 | 32.3 | 32 | 1.01 | path-copied node arena; ~1% slot slack over the node size |\n| MergeSortTree | 8,912,896 | 136.0 | 8 | 17.00 | a sorted run copied at each of `log n` levels -- the offline range-rank space cost |\n\nThe overhead-x load-factor curve RISES as load falls for the heap + pointer-node members (BinaryHeap, SkipList, Treap, Scapegoat, MinMaxHeap, SplayTree, BinomialHeap, PairingHeap, FibonacciHeap, SortedArray -- fixed backing over fewer live) and is FLAT for the INDEX-ADDRESSED members (Fenwick, SegmentTree, Fenwick2D, SegmentTree2D, PersistentSegTree, MergeSortTree -- every cell is always live) -- another honest `n/a` where insertion order does not apply. MergeSortTree's 17x is the family's highest, the disclosed space co-headline of an offline range-rank structure.\n\n### D5 -- bundle size + tree-shaking (esbuild min + gzip)\n\nA single-member import must be `< 40%` of the all-member import. All nineteen clear it comfortably against the full nineteen-member bundle (`18,603 B` gzip): the heaviest lone member (FibonacciHeap, the widest surface) is `~0.14`, the lightest (Fenwick) `~0.04`, and the median lone-import ratio is `~0.08 (< 0.40)`. Every single-member import drops the vast majority of the code.\n\n| member | single gz (B) | all gz (B) | ratio | `< 40%`? |\n| --- | --- | --- | --- | --- |\n| BinaryHeap | 1,365 | 18,603 | 0.073 | yes |\n| Fenwick | 826 | 18,603 | 0.044 | yes |\n| SegmentTree | 1,070 | 18,603 | 0.058 | yes |\n| SkipList | 1,546 | 18,603 | 0.083 | yes |\n| Treap | 2,036 | 18,603 | 0.109 | yes |\n| Scapegoat | 1,900 | 18,603 | 0.102 | yes |\n| MinMaxHeap | 1,272 | 18,603 | 0.068 | yes |\n| SplayTree | 1,455 | 18,603 | 0.078 | yes |\n| BinomialHeap | 1,880 | 18,603 | 0.101 | yes |\n| PairingHeap | 2,204 | 18,603 | 0.118 | yes |\n| FibonacciHeap | 2,660 | 18,603 | 0.143 | yes |\n| Fenwick2D | 1,270 | 18,603 | 0.068 | yes |\n| SegmentTree2D | 1,610 | 18,603 | 0.087 | yes |\n| SortedArray | 1,267 | 18,603 | 0.068 | yes |\n| PersistentSegTree | 1,587 | 18,603 | 0.085 | yes |\n| MergeSortTree | 1,077 | 18,603 | 0.058 | yes |\n| WaveletTree | 2,102 | 18,603 | 0.113 | yes |\n| CartesianTree | 1,151 | 18,603 | 0.062 | yes |\n| LinkCutTree | 1,514 | 18,603 | 0.081 | yes |\n\n### D6 -- GC pressure (the 0 B/op gate as a curve, per op-row)\n\nAll twenty-four gated op-rows report **0 B/op** across the `n = 1e3..1e6` sweep, with `max major GC = 0`. The precise proof stays `node --expose-gc test/torture.mjs` (via `@zakkster/lite-gc-profiler`); D6 is the portable curve (min heap-delta over independent passes -- heap-accounting jitter only ADDS, so a truly-zero kernel hits 0 on its best pass while a per-op allocator stays positive on every pass).\n\n### The other dimensions\n\n- **D2 amortized cost** -- cumulative ns/op stays bounded over a `~1M`-op mixed trace (drift `< 1.0` here: the trace speeds up as the JIT warms, never degrades).\n- **D4 cache (PROXY, labelled)** -- dense `forEach` iteration vs random single-element lookup; the random/dense gap is `~1.9x` (SegmentTree) to `~2.9x` (SkipList). No native perf counters.\n- **D7 scalability** -- numeric substrates: string + object keys read `n/a` on all nineteen. Load factors `0.3/0.5/0.7/0.9`; insertion order (sorted / random / adversarial-reverse) applies to the comparison-ordered BinaryHeap + SkipList + Treap + Scapegoat + MinMaxHeap + SplayTree + BinomialHeap + PairingHeap + FibonacciHeap, and reads `n/a` for the index-addressed Fenwick + SegmentTree + Fenwick2D + SegmentTree2D + PersistentSegTree + MergeSortTree + WaveletTree + CartesianTree + LinkCutTree (vertex-id-addressed) and for the shift-insert SortedArray.\n- **D8 workloads** -- churn (all nineteen members) + an ordered scan (`successor` + `rangeIter`, on the ordered maps SkipList + Treap + Scapegoat + SplayTree + SortedArray; `n/a` elsewhere -- the heaps BinaryHeap / MinMaxHeap / BinomialHeap / PairingHeap / FibonacciHeap are priority queues, and Fenwick / SegmentTree / Fenwick2D / SegmentTree2D / PersistentSegTree / MergeSortTree / WaveletTree / CartesianTree / LinkCutTree are index-addressed / positional -- not ordered maps).\n\n## API reference\n\n### Constants\n\n| Export | Type | Value | Meaning |\n| --- | --- | --- | --- |\n| `VERSION` | `string` | `'1.4.0'` | The package version. One of the three version sites (package.json / `LogN.js` `VERSION` const / `llms.txt`), kept in lockstep and enforced in review. |\n\n### BinaryHeap\n\n<details>\n<summary><strong>BinaryHeap</strong> -- Indexed binary heap / addressable priority queue -- push / pop / changeKey / remove O(log n), peek / topKey / keyOf / has O(1).</summary>\n\nAn **indexed binary heap** (an addressable priority queue): a min|max binary heap over three parallel, pointer-free typed arrays -- `_key` (`Float64Array`, the priority at each heap slot), `_id` (`Uint32Array`, the entity id at each slot), and `_pos` (`Int32Array`, the reverse map entity-id -> slot, sentinel `-1` == absent). A plain binary heap gives O(log n) `push` / `pop` but cannot find an arbitrary element to reprioritize; the reverse-index map buys O(log n) `changeKey` / `remove` by a caller-supplied entity id. Children of slot `i` are `2i+1` / `2i+2`. Entity ids are integers in `[0, capacity)`; keys are finite numbers. Every hot op allocates zero bytes after construction (hole-punching sift -- one write per level, no 3-write swap).\n\n```js\nimport { BinaryHeap } from '@zakkster/lite-logn';\n\nconst pq = new BinaryHeap(1024, 'min');   // capacity 1024, min-heap\npq.push(7, 5.0);                          // entity 7 at priority 5.0\npq.push(3, 2.5);\npq.push(9, 8.0);\npq.peek();        // -> 3   (id of the extremum)\npq.topKey();      // -> 2.5 (its key)\npq.changeKey(9, 1.0);   // reprioritize entity 9 to the front\npq.pop();         // -> 9   (removes and returns the new extremum)\npq.remove(7);     // -> true (addressable delete by id)\n\n// Floyd O(n) bulk build from parallel arrays:\nconst heap = BinaryHeap.build('max', [0, 1, 2, 3], [4.0, 1.0, 9.0, 2.0], 16);\nheap.pop();       // -> 2   (the id whose key 9.0 is the max)\n```\n\n| Member | Signature | Complexity | Notes |\n| --- | --- | --- | --- |\n| constructor | `new BinaryHeap(capacity, kind = 'min')` | O(capacity) | `capacity` integer in `[1, 2^31-1]`; `kind` is `'min'` or `'max'`. Allocates the three typed arrays once; `_pos.fill(-1)`. |\n| `push` | `push(id, key) -> void` | O(log n) | id in `[0, capacity)`, not already present; key finite. Throws on out-of-range/duplicate id, non-finite key, or full heap. |\n| `pop` | `pop() -> number \\| undefined` | O(log n) | Removes and returns the extremum's id; `undefined` if empty (no throw). |\n| `peek` | `peek() -> number \\| undefined` | O(1) | The extremum's id; `undefined` if empty. |\n| `topKey` | `topKey() -> number \\| undefined` | O(1) | The extremum's key; `undefined` if empty. |\n| `keyOf` | `keyOf(id) -> number \\| undefined` | O(1) | The key associated with id; `undefined` if absent. Out-of-range id throws. |\n| `has` | `has(id) -> boolean` | O(1) | True iff id is resident. Out-of-range id throws. |\n| `changeKey` | `changeKey(id, newKey) -> void` | O(log n) | Reprioritize a present entity (auto-direction sift); a non-member id throws. |\n| `remove` | `remove(id) -> boolean` | O(log n) | Idempotent: `false` if absent, `true` if removed. |\n| `clear` | `clear() -> void` | O(capacity) | Resets size and the reverse map. |\n| `forEach` | `forEach(fn) -> void` | O(n) | Visits `(id, key)` in UNSPECIFIED (heap-array) order -- NOT sorted / pop order. |\n| `[Symbol.iterator]` | `for (const id of heap)` | O(n) | Yields live ids in UNSPECIFIED order. |\n| `size` / `capacity` / `kind` | getters | O(1) | Live count / fixed capacity / `'min'` \\| `'max'`. |\n| `BinaryHeap.build` | `build(kind, ids, keys, capacity) -> BinaryHeap` | O(n) | Floyd bulk build from parallel arrays; fails closed on duplicate/out-of-range id, non-finite key, or `count > capacity`. |\n\n</details>\n\n### Fenwick\n\n<details>\n<summary><strong>Fenwick</strong> -- Fenwick / BIT -- point-update AND prefix-sum O(log n) via the i & -i walk; rangeSum / at / set, O(n) build.</summary>\n\nA **Fenwick tree** (Binary Indexed Tree): BOTH point-update AND prefix-sum in O(log n) over a single flat `Float64Array`, using nothing but the lowest-set-bit walk (`i & -i`). It answers the most delightfully non-obvious complexity question in the family -- \"how can update AND query both be logarithmic on a plain array?\" -- and the witness proves it with TWO straight log lines. Public indices are **0-based** in `[0, length)`; internally the tree is 1-based, so `_t[0]` is the unused identity sentinel and is never read as data (null is not zero). `update` climbs by `i & -i` (one `_t` touch per level); `prefix` descends by `i & -i` (one read per level); `rangeSum` and `at` are pairs of inlined prefix walks. Values are finite numbers (negatives allowed); NaN / +-Infinity / non-number fail closed. Every hot op allocates zero bytes after construction.\n\n```js\nimport { Fenwick } from '@zakkster/lite-logn';\n\nconst f = new Fenwick(1000);\nf.update(10, 5);        // add 5 at index 10\nf.update(20, 3);        // add 3 at index 20\nf.prefix(15);           // -> 5   (sum of [0..15] inclusive)\nf.prefix(-1);           // -> 0   (the empty-prefix base case)\nf.rangeSum(10, 20);     // -> 8   (sum of [10..20] inclusive)\nf.at(10);               // -> 5   (single element = prefix(10) - prefix(9))\nf.set(10, 100);         // set index 10 to 100 (absolute)\nf.prefix(20);           // -> 103\n\n// O(n) LINEAR bulk build (not n incremental updates):\nconst g = Fenwick.build([1, 2, 3, 4, 5]);\ng.rangeSum(1, 3);       // -> 9\n```\n\n| Member | Signature | Complexity | Notes |\n| --- | --- | --- | --- |\n| constructor | `new Fenwick(length)` | O(length) | `length` integer in `[1, 2^31-1]`. Allocates one `Float64Array(length + 1)`, zero-initialized. |\n| `update` | `update(i, delta) -> this` | O(log n) | Add `delta` at 0-based index `i` (climb by `i & -i`). `delta` finite (typeof-guarded first); out-of-range `i` throws. |\n| `prefix` | `prefix(i) -> number` | O(log n) | Sum of `[0, i]` INCLUSIVE (descend by `i & -i`). `prefix(-1) === 0`; valid domain `[-1, length)`. |\n| `rangeSum` | `rangeSum(lo, hi) -> number` | O(log n) | Sum of `[lo, hi]` INCLUSIVE both ends = `prefix(hi) - prefix(lo-1)`. Throws on out-of-range or `lo > hi`. |\n| `at` | `at(i) -> number` | O(log n) | The single element = `prefix(i) - prefix(i-1)`. Out-of-range `i` throws. |\n| `set` | `set(i, value) -> this` | O(log n) | Set element `i` to `value` (absolute), via `update(i, value - at(i))`. `value` finite; S1 magnitude budget (below). |\n| `setFrom` | `setFrom(src, i) -> this` | O(log n) | Element `i` := `src[i]` (`src` a `Float64Array`, read INSIDE -> 0 B/op, the zero-box sibling of `set`). Non-`Float64Array` `src` throws; same finite + S1 doors. |\n| `search` | `search(target) -> index` | O(log n) | The smallest `i` with `prefix(i) >= target`, an EXACT lower_bound over the library's own `prefix()` (the descent sums cells HIGH->LOW, bit-for-bit as `prefix()` does). Returns `length` iff `target > total` or `target === +Infinity`; `target <= 0` -> `0`. O(log n) ALWAYS -- a zero-run is spanned by O(log n) tree cells, never O(zero-run)/O(n). For exactly-representable sums (integers <= 2^53) it matches a BigInt oracle and never returns a zero-weight index for `target > 0`. For fractional weights the returned index's prefix is within one ULP of `target` (the sampling guarantee's float bound). Precondition (documented, NOT enforced): every element `>= 0`. NaN / non-number throws. Boxes its one `target` arg when the caller is not inlined -- use `searchFrom` for 0 B/op. |\n| `searchFrom` | `searchFrom(src, i) -> index` | O(log n) | `target := src[i]`, read INSIDE -> **0 B/op** (the slot sibling of `search`; lite-pick calls it per pick from a non-inlined site, where `search`'s one arg box would be 16 B/pick). Identical semantics + doors, sharing the same body. Non-`Float64Array` `src` or out-of-range `i` throws; NaN `src[i]` throws; byte-identical state on a rejection. |\n| `clear` | `clear() -> this` | O(length) | Zeros every element in place, keeping capacity; resets the S1 magnitude bound. |\n| `forEach` | `forEach(fn) -> void` | O(n log n) | Visits `(value, index, fenwick)` in ascending index order (each element is an `at` walk). |\n| `length` | getter | O(1) | Element count this tree was sized for. |\n| `Fenwick.build` | `build(values) -> Fenwick` | O(n) | LINEAR bulk build (each cell adds itself to its parent in one forward pass); fails closed on a non-array-like, any non-finite value, or an over-budget sum \\|value\\| (S1). |\n\n**S1 overflow budget (Fenwick / Fenwick2D).** A scalar upper bound on `sum |element|` is kept at the door: `update` adds `|delta|`, `set` / `setFrom` add `|new - old|`, `build` sets `sum|v|`, `clear` resets to 0; the budget is `MAX_VALUE / 2` (1D) / `MAX_VALUE / 4` (2D). The hot path pays one add and one compare. A write that would exceed the budget takes a COLD O(n) exact recompute that resets the drifted bound and either accepts the write or throws `[lite-logn]` with the state byte-identical -- so a finite input can no longer produce a sticky NaN. Near a true magnitude of ~1e308 the cold path can repeat under churn (disclosed).\n\n</details>\n\n### SegmentTree\n\n<details>\n<summary><strong>SegmentTree</strong> -- Associative range-query (min / max / sum / gcd) + point-update, both O(log n); fold frozen at construction.</summary>\n\nA **segment tree**: an associative range-query AND a point-update, BOTH O(log n), over a SINGLE flat `Float64Array(2n)` -- no nodes, no pointers, no recursion on the hot path. It is the complement to Fenwick: Fenwick's `rangeSum` works only because subtraction inverts addition, so it is a SUM machine; SegmentTree folds ANY associative + commutative operation over a range -- **min / max / sum / gcd** -- because it stores a fold of each subtree at its internal node rather than a prefix. The fold is chosen ONCE at construction and cached as a small-int combined by an INLINE switch on the hot path (no function ref, no closure, no megamorphic call site). Leaves live at `_t[n + i]`; internal node `p` holds the fold of its children `_t[2p]` / `_t[2p+1]`, so `_t[1]` is the fold of the whole array and `_t[0]` is unused (null is not zero). `update` sets a leaf and climbs to the root recomputing each ancestor (one write per level); `query` walks the two boundaries up the tree, folding each node that lies fully inside `[lo, hi]` into one accumulator. Every hot op allocates zero bytes after construction.\n\nThe fold's **identity** fills query accumulators and cleared / fresh leaves -- `sum -> 0`, `min -> +Infinity`, `max -> -Infinity`, `gcd -> 0` -- so a fresh or cleared tree queries to the identity. Identity is a legal RESULT but NEVER a legal INPUT: the value door rejects user `NaN` / `+-Infinity` (and, for the `gcd` kind, any negative or non-integer value), typeof-guarded before coercion.\n\n```js\nimport { SegmentTree } from '@zakkster/lite-logn';\n\nconst st = new SegmentTree(1000, 'min');   // 1000 slots, all +Infinity (min identity)\nst.update(10, 5);        // set index 10 to 5 (absolute)\nst.update(20, 3);        // set index 20 to 3\nst.query(0, 999);        // -> 3   (min over [0..999] inclusive)\nst.query(10, 10);        // -> 5   (a one-element range = the leaf)\nst.at(20);               // -> 3   (the single leaf value, O(1))\n\n// A different fold, chosen at construction:\nconst sum = SegmentTree.build([1, 2, 3, 4, 5], 'sum'); // O(n) bottom-up bulk build\nsum.query(1, 3);         // -> 9   (2 + 3 + 4)\nconst g = SegmentTree.build([12, 18, 24], 'gcd');\ng.query(0, 2);           // -> 6\n```\n\nThe iterative `2n` layout is **order-agnostic** -- `query` mixes left- and right-boundary contributions into one accumulator, so it is correct ONLY because min / max / sum / gcd are all COMMUTATIVE as well as associative. A future non-commutative fold (matrix product, string concat) would need a pow2 layout with separate ordered accumulators (see [`decisions/0005-segtree.md`](./decisions/0005-segtree.md)).\n\n| Member | Signature | Complexity | Notes |\n| --- | --- | --- | --- |\n| constructor | `new SegmentTree(length, kind)` | O(length) | `length` integer in `[1, 2^30-1]` (HALF of Fenwick's ceiling: the `2n` array must keep `2n` a positive int32); `kind` is `'min'` \\| `'max'` \\| `'sum'` \\| `'gcd'`. Allocates one `Float64Array(2 * length)`. |\n| `query` | `query(lo, hi) -> number` | O(log n) | The fold over `[lo, hi]` INCLUSIVE both ends. Throws on out-of-range or `lo > hi`. `lo == hi` returns that single leaf. |\n| `update` | `update(i, value) -> this` | O(log n) | Set leaf `i` to `value` (ABSOLUTE), then fix ancestors. `value` finite (nonnegative integer for the `gcd` kind); out-of-range `i` throws. The `sum` kind additionally bounds `\\|value\\| <= MAX_VALUE / (2 * length)` at the door (S1), so a full-range fold never overflows to Infinity / NaN. |\n| `setFrom` | `setFrom(src, i) -> this` | O(log n) | Leaf `i` := `src[i]` (`src` a `Float64Array`, read INSIDE -> 0 B/op, the zero-box sibling of `update`); same finite / gcd-domain / S1 doors. Non-`Float64Array` `src` throws. |\n| `at` | `at(i) -> number` | O(1) | The single leaf value. Out-of-range `i` throws. |\n| `clear` | `clear() -> this` | O(n) | Resets every element to the fold identity, keeping capacity. |\n| `forEach` | `forEach(fn) -> void` | O(n) | Visits `(value, index, tree)` in ascending leaf order. |\n| `length` / `kind` | getters | O(1) | Element count / the frozen fold `'min'` \\| `'max'` \\| `'sum'` \\| `'gcd'`. |\n| `SegmentTree.build` | `build(values, kind) -> SegmentTree` | O(n) | Bottom-up bulk build (seed leaves, then fold each internal node once deepest-first -- NOT n incremental updates); fails closed on a non-array-like, any non-finite value, or (gcd) any negative / non-integer. |\n\n</details>\n\n### SkipList\n\n<details>\n<summary><strong>SkipList</strong> -- Pointer-free ordered map -- get / set / delete / successor / predecessor / rangeIter, expected O(log n).</summary>\n\nA **skip list**: a pointer-free **ordered map** (key -> value) whose `get` / `set` / `delete` / `successor` / `predecessor` are **expected O(log n)** via a probabilistic tower of forward links -- the family's first randomized member and its first pointer-based one. Where the array-embedded members bury a fixed-shape tree in index arithmetic, a skip list's shape is random, so it needs real per-node links; the trick that keeps it zero-GC is storing those links as slot **indices** in flat `Uint32Array` columns over a private free-list (`NodePool`), never as heap objects. `NIL = 0`, slot 0 is the head sentinel, and level generation is one step of the repo's Numerical-Recipes LCG whose high bits draw a geometric height (`1 + clz32(word)`) -- deterministic from an instance-local seed, no `Math.random`. Keys are finite numbers (typeof-guarded before coercion; Symbol / BigInt / NaN / +-Infinity fail closed); values are finite numbers; `set` on an existing key updates the value in place (no new node). Every hot op allocates zero bytes after construction.\n\nHonesty note: the hot ops are **expected** O(log n), not worst-case -- an unlucky seed can build a tall thin tower and spike a single op. The witness fits the clean average line **and** separately prints the MAX single insert over a realistic randomized build trace, so the expectation is never sold as a guarantee.\n\n```js\nimport { SkipList } from '@zakkster/lite-logn';\n\nconst sl = new SkipList(1000, 42);   // capacity 1000, seed 42 (deterministic)\nsl.set(50, 500);                     // insert key 50 -> value 500\nsl.set(20, 200);\nsl.set(80, 800);\nsl.get(20);            // -> 200\nsl.set(20, 222);       // update value in place (no new node)\nsl.successor(20);      // -> 50   (smallest key strictly greater)\nsl.predecessor(80);    // -> 50   (largest key strictly less)\n[...sl.rangeIter(20, 60)];  // -> [20, 50]  (keys in [lo, hi], ascending)\nsl.delete(50);         // -> true (idempotent: false if absent)\n```\n\n| Member | Signature | Complexity | Notes |\n| --- | --- | --- | --- |\n| constructor | `new SkipList(capacity, seed?)` | O(capacity) | `capacity` integer in `[1, 2^26-1]` (slot indices are `Uint32`, `NIL = 0` reserves slot 0, the `MAXLEVEL`-column stride must stay addressable); `seed` an unsigned 32-bit integer (default fixed). Allocates the typed-array columns + private pool once. |\n| `get` | `get(key) -> number \\| undefined` | expected O(log n) | The value under `key`, or `undefined` if absent (no throw). Non-finite key throws. |\n| `set` | `set(key, value) -> this` | expected O(log n) | Insert `key -> value`, or update the value in place if `key` exists. Non-finite key/value throws; a full pool throws. |\n| `delete` | `delete(key) -> boolean` | expected O(log n) | Idempotent: `false` if absent, `true` if removed. Non-finite key throws. |\n| `successor` | `successor(key) -> number \\| undefined` | expected O(log n) | The smallest key STRICTLY greater than `key`, or `undefined`. `key` need not be present. |\n| `predecessor` | `predecessor(key) -> number \\| undefined` | expected O(log n) | The largest key STRICTLY less than `key`, or `undefined`. `key` need not be present. |\n| `rangeIter` | `rangeIter(lo, hi) -> IterableIterator<number>` | O(log n + k) | Version-stamped iterator over keys in `[lo, hi]` INCLUSIVE, ascending. Bounds may be `+-Infinity` (unbounded ends); `NaN` or `lo > hi` throws; a structural mutation mid-iteration throws. |\n| `forEach` | `forEach(fn) -> void` | O(n) | Visits `(key, value, list)` in ascending key order. |\n| `clear` | `clear() -> this` | O(capacity) | Empties the list, keeps capacity, resets the PRNG to its initial seed. |\n| `size` / `capacity` | getters | O(1) | Live entry count / fixed capacity. |\n\n</details>\n\n### Treap\n\n<details>\n<summary><strong>Treap</strong> -- Randomized-balanced order-statistic map -- adds rank / select / split / merge, expected O(log n).</summary>\n\nA **treap**: a randomized, self-balancing **binary search tree** that is also an **order-statistic tree** -- an AUGMENTED ordered map (key -> value) -- the family's balanced BST. It holds two orders at once: a **BST order** on the key and a **max-heap order** on a per-node random priority; a random-priority heap over a BST is provably balanced **in expectation**, so `get` / `set` / `delete` are **expected O(log n)**. A third invariant, a subtree-size column maintained in the SAME pass as every link rewrite, adds `rank(x)` (how many keys are `< x`), `select(k)` (the k-th smallest key), and O(log n) `split` / `merge`. Nodes are slot **indices** in six flat columns (`_key` / `_value` `Float64`; `_left` / `_right` / `_prio` / `_size` `Uint32`, `NIL = 0`) over the SAME private free-list (`NodePool`) SkipList uses -- design-parity, never a heap object per op. Priority is one instance-local Numerical-Recipes LCG draw per insert (deterministic from a seed; ties break by key). Keys and values are finite numbers (typeof-guarded before coercion; Symbol / BigInt / NaN / +-Infinity fail closed); `set` on an existing key updates the value in place. Every hot op allocates zer","readmeFilename":"README.md"}