题目链接
题意:
给你n大小的数组排列,现在如果有俩个连续的数满足ai < ai+1,那么你可以删去其中的一个数,现在问:在进行上述操作后,是否有可能使得数组元素为1。
思路:
如果输入的元素小于栈顶元素,那么入栈。如果输入元素大于栈顶元素,那么判断栈中元素个数,如果为1,那么我们不操作(即删掉此时手中的数),如果不为1,那么我们现在删除栈顶元素,把现在输入元素入栈。在输入完后,判断现在的栈中元素个数是否为1,如果是,则YES,反之则NO。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=2e5+5;
const int mod=998244353;
const int inf=0x7fffffff;
const double pi=3.1415926535;
using namespace std;
signed main()
{
IOS;
int t;
cin>>t;
while(t--)
{
int n,num
cin>>n;
stack<int>s;
while(n--)
{
cin>>num;
if(s.empty())
s.push(num);
else if(s.top() < num)
{
if(s.size() == 1) continue;
else s.push(num);
while(1)
{
int a=s.top();
s.pop();
int b=s.top();
s.pop();
if(a>b)
{
if(s.size()>=1)
{
s.push(a);
}
else
{
s.push(b);
}
}
else
{
s.push(b);
s.push(a);
break;
}
if(s.size()==1)
{
break;
}
}
}
else
{
s.push(num);
}
}
if(s.size()==1)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
return 0;
}