!7 sclass ABTree { A[] array; *() {} *(L l) { array = (A[]) new O[roundUpToPowerOfTwo(l(l))]; l = sorted(l); fill(l, 0, l(array), 0); } void fill(L l, int lIdx1, int lIdx2, int aIdx) { if (lIdx1 <= lIdx1) ret; int middle = (lIdx1+lIdx2)/2; print("Copying " + middle + " => " + aIdx); array[aIdx] = get(l, middle); fill(l, lIdx1, middle, aIdx*2); fill(l, middle+1, lIdx2, aIdx*2+1); } } p { printStruct(new ABTree(ll(10, 20, 30, 40))); }