ocaml: phase 5.1 segment_tree.ml baseline (range-sum tree, fingerprint 4232)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 22s

Power-of-two-indexed segment tree over [1;3;5;7;9;11;13;15]:
  build sums (root holds total = 64)
  query returns range sum in O(log n)
  update propagates a point delta back up the path

Sequence:
  r1 = query [2,5] = 5 + 7 + 9 + 11 = 32
  update idx 3 += 10  (so a[3] becomes 17)
  r2 = query [2,5] = 5 + 17 + 9 + 11 = 42
  encoded fingerprint = r1 + r2*100 = 32 + 4200 = 4232

Tests three mutually independent recursive functions with array
index arithmetic on 2*node / 2*node+1, half-bisection on mid =
(l+r)/2, bottom-up combine pattern.

167 baseline programs total.
This commit is contained in:
2026-05-10 23:38:40 +00:00
parent 3fe3b7b66f
commit 175a77fba5
3 changed files with 48 additions and 0 deletions

View File

@@ -141,6 +141,7 @@
"run_decode.ml": 21,
"run_length.ml": 11,
"safe_div.ml": 20,
"segment_tree.ml": 4232,
"shuffle.ml": 55,
"simpson_int.ml": 10000,
"stable_unique.ml": 46,

View File

@@ -0,0 +1,38 @@
let n = 8
let st = Array.make (4 * n) 0
let rec build a l r node =
if l = r then st.(node) <- a.(l)
else begin
let mid = (l + r) / 2 in
build a l mid (2 * node);
build a (mid + 1) r (2 * node + 1);
st.(node) <- st.(2 * node) + st.(2 * node + 1)
end
let rec query l r ql qr node =
if qr < l || ql > r then 0
else if ql <= l && r <= qr then st.(node)
else begin
let mid = (l + r) / 2 in
query l mid ql qr (2 * node) + query (mid + 1) r ql qr (2 * node + 1)
end
let rec update l r idx delta node =
if l = r then st.(node) <- st.(node) + delta
else begin
let mid = (l + r) / 2 in
if idx <= mid then update l mid idx delta (2 * node)
else update (mid + 1) r idx delta (2 * node + 1);
st.(node) <- st.(2 * node) + st.(2 * node + 1)
end
;;
let a = [| 1; 3; 5; 7; 9; 11; 13; 15 |] in
build a 0 (n - 1) 1;
let r1 = query 0 (n - 1) 2 5 1 in
update 0 (n - 1) 3 10 1;
let r2 = query 0 (n - 1) 2 5 1 in
r1 + r2 * 100

View File

@@ -407,6 +407,15 @@ _Newest first._
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
'a tree`) with insert + in-order traversal. Tests parametric ADT,
recursive match, List.append, List.fold_left.
- 2026-05-10 Phase 5.1 — segment_tree.ml baseline (range-sum
segment tree over [1;3;5;7;9;11;13;15] with one point update,
encoded r1 + r2*100 = 4232). build/query/update use the standard
power-of-two indexing (node, 2·node, 2·node+1) over a flat
4n-sized array. First range query 5+7+9+11=32; after adding 10
to index 3, the same range = 5+17+9+11=42. Encoded: 32 + 42*100
= 4232. Tests three mutually independent recursive functions
with array index arithmetic, half-bisection on `mid = (l + r) / 2`,
bottom-up combine pattern. 167 baseline programs total.
- 2026-05-10 Phase 5.1 — magic_square.ml baseline (5×5 Siamese
construction → main-diagonal sum 65, the magic constant for n=5).
Place k=1 at (0, n/2); for each next k, move up-right with wrap-