internal TreapNode ChangeKth(uint k, T value) { uint pos = left != null ? left.size : 0; int b = k.CompareTo(pos); if (b == 0) { TreapNode tmp = new TreapNode(this); tmp.value = value; return(tmp); } else if (b < 0) { return(new TreapNode(this, left.ChangeKth(k, value), right)); } else { return(new TreapNode(this, left, right.ChangeKth(k - pos - 1, value))); } }
public PersistentMap <K, T> ChangeKth(uint pos, T value) { return(new PersistentTreapMap <K, T>(root.ChangeKth(pos, value))); }