class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
return verify(sequence, 0, sequence.size() - 1);
}
private:
bool verify(vector<int>& seq, int l, int r) {
if (l > r) return false;
if (l == r) return true;
int idx = distance(begin(seq), find_if(begin(seq) + l, begin(seq) + r,
[&](int v) { return v > seq[r]; }));
if (idx == r) return verify(seq, l, idx - 1);
int k = idx + 1;
while (k < r) {
if (seq[k] <= seq[r]) return false;
++k;
}
if (idx == l) return verify(seq, idx, r - 1);
return verify(seq, l, idx - 1) && verify(seq, idx, r - 1);
}
};