题目描述
我们知道,一个入栈序列是{1,2,3}的合法出栈序列有{3,2,1},{1,2,3}等,而{3,1,2}是不合法的.现在冰语有一个长度为n的序列A(保证序列内数字唯一,且1<=A[i]<=n)。他想知道这个序列是不是入栈顺序{1,2,3,…n}的合法出栈序列,你能告诉他么?
输入
第一行为T,表示样例个数
每个样例第一行为n,第二行为n个数
1<=T<=1e4,3<=n<=100
输出
对于每个样例输出一行,合法输出"YES",反之输出"NO",
样例输入 Copy
1
3
3 1 2
样例输出 Copy
NO
题解:判断一个是否存在三元组(i,j,k)满足i<j<k且a[i]>a[k]>a[j]即可。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 111;
vector <long long > g;
int T ,n;
int a[maxn];
int main(){
ios::sync_with_stdio(0);
cin.tie();
cin >> T;
while(T--){
cin >>n;
bool flag = 0;
for(int i=1 ;i<= n;i++){
cin >> a[i];
int c1 =0;
for(int j=i-1;j>0;--j){
if(flag){
break;
}if(a[j] < a[i]){
c1=1;
}else if(c1){
flag = 1;
break;
}
}
}
if(flag){
cout << "NO"<<endl;
}
else {
cout <<"YES"<<endl;
}
}
return 0;
}