import java.util.*;

public class Solution {
    public boolean VerifySquenceOfBST(int[] sequence) {
        // 处理空数组的情况
        if (sequence == null || sequence.length == 0) {
            return false;
        }
        return judge(sequence, 0, sequence.length - 1);
    }
    
    // 使用索引范围而不是复制数组,提高效率
    private boolean judge(int[] sequence, int start, int end) {
        // 递归出口:子树为空或只有一个节点
        if (start >= end) {
            return true;
        }
        
        int rootVal = sequence[end];  // 根节点值
        int leftEnd = start;  // 左子树结束位置
        
        // 找到第一个大于根节点的元素,划分左右子树
        while (sequence[leftEnd] < rootVal) {
            leftEnd++;
        }
        
        // 验证右子树所有元素都大于根节点
        for (int i = leftEnd; i < end; i++) {
            if (sequence[i] <= rootVal) {
                return false;  // 右子树存在小于等于根节点的值,不合法
            }
        }
        
        // 递归验证左右子树
        return judge(sequence, start, leftEnd - 1) &&  // 左子树
               judge(sequence, leftEnd, end - 1);      // 右子树
    }
}