コード例 #1
0
ファイル: Treap.cs プロジェクト: gotthit/DynamicConvexHull
 public static void SplitBySize(Treap <T> current, int toCut, out Treap <T> leftHalf, out Treap <T> rightHalf)
 {
     if (current == null)
     {
         leftHalf  = null;
         rightHalf = null;
     }
     else if (GetSize(current.Left) >= toCut)
     {
         SplitBySize(current.Left, toCut, out leftHalf, out rightHalf);
         current.Left = rightHalf;
         current.update();
         rightHalf = current;
     }
     else
     {
         SplitBySize(current.Right, toCut - GetSize(current.Left) - 1, out leftHalf, out rightHalf);
         current.Right = leftHalf;
         current.update();
         leftHalf = current;
     }
 }
コード例 #2
0
ファイル: Treap.cs プロジェクト: gotthit/DynamicConvexHull
 public static Treap <T> Merge(Treap <T> leftTreap, Treap <T> rightTreap)
 {
     if (leftTreap == null)
     {
         return(rightTreap);
     }
     if (rightTreap == null)
     {
         return(leftTreap);
     }
     if (randomGenerator.Next(0, leftTreap.Size + rightTreap.Size) < leftTreap.Size)
     {
         leftTreap.Right = Merge(leftTreap.Right, rightTreap);
         leftTreap.update();
         return(leftTreap);
     }
     else
     {
         rightTreap.Left = Merge(leftTreap, rightTreap.Left);
         rightTreap.update();
         return(rightTreap);
     }
 }