예제 #1
0
            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)));
                }
            }
예제 #2
0
 public PersistentMap <K, T> ChangeKth(uint pos, T value)
 {
     return(new PersistentTreapMap <K, T>(root.ChangeKth(pos, value)));
 }