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
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:
@@ -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,
|
||||
|
||||
38
lib/ocaml/baseline/segment_tree.ml
Normal file
38
lib/ocaml/baseline/segment_tree.ml
Normal 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
|
||||
@@ -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-
|
||||
|
||||
Reference in New Issue
Block a user