import java.util.Arrays;
public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if(sequence.length == 0) return false; if(sequence.length == 1) return true;
int root = sequence[sequence.length - 1];
if(sequence.length == 2) {
return true;
}
int dividePoint = dividePoint(sequence, root);
if(dividePoint == -1) {
int[] left1 = Arrays.copyOfRange(sequence, 0, sequence.length-1);
if(greaterAll(left1, root)) {
if(VerifySquenceOfBST(left1)) return true;
}else return false;
}
if(dividePoint == 0) {
int[] right1 = Arrays.copyOfRange(sequence, 0, sequence.length-1);
if(smallerAll(right1, root)) {
if(VerifySquenceOfBST(right1)) return true;
}else return false;
}
int[] left = Arrays.copyOfRange(sequence, 0, dividePoint);
int[] right = Arrays.copyOfRange(sequence, dividePoint, sequence.length-1);
if(greaterAll(left,root) && smallerAll(right,root)) {
if(VerifySquenceOfBST(left) && VerifySquenceOfBST(right)) return true;
}
return false;
}
public boolean greaterAll(int[] a,int root) {
for(int i = 0;i < a.length;i++) {
if(root < a[i]) break;
if(root>a[i] && i==a.length-1) return true;
}
return false;
}
public boolean smallerAll(int[] a,int root) {
for(int i = 0;i < a.length;i++) {
if(root > a[i]) break;
if(root<a[i] && i==a.length-1) return true;
}
return false;
}
public int dividePoint(int[] a,int root) {
int num = -1;
for(int i = 0;i < a.length;i++) {
if(a[i] > root) {
num = i;
break;
}
}
return num;
}
}