只要两个连续的块相等就抵消,(和easy版本不同的是不能竖着放,所以需要处理两种特殊情况)
inline void solve()
{
int n;cin>>n;
int mx=-1,flag=1;
stack<int>st;
rpp(i,n)
{
int x;cin>>x;
mx=max(mx,x);
if(st.empty()) st.push(x);
else
{
if(st.top()<x) flag=0;
else if(st.top()==x) st.pop();
else st.push(x);
}
}
if(st.size()>1||(st.size()==1&&st.top()!=mx)) flag=0;
if(flag==0) cout<<"NO\n";
else cout<<"YES\n";
}