1051. Pop Sequence

保持当前遇到的最大值,小于此最大值的最小值,小于等于此最大值的数字个数,当出现一个新的最大值,其右侧(即随后出栈的)比它小的数字是降序的,总个数不能超出容量,复杂度O(n)

#include<iostream>
#include<string>
using namespace std;
int m,n,k,val[2222];
int main(){
  cin>>m>>n>>k;
  while(k--){
    int mmax=-1,size,mmin,fail=false;
    for(int i=0,tmp;i<n;++i){
      cin>>tmp;
      if(tmp>mmax)mmax=tmp,size=1,mmin=tmp;
      else if(tmp>mmin) fail=true;
      else if(size<m) mmin=tmp,++size;
      else fail=true;
    }//for
    cout<<(fail?"NO":"YES")<<endl;
  }//while
}


你可能感兴趣的:(1051. Pop Sequence)