模拟栈,给出栈最大容量,问是否可以这样出来。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include<vector>
#include <queue>
#include <stack>
#include <math.h>
using namespace std;
const int INF=1e9+7;
int map1[1050][1050];
int pre[30500];
int walk[1500];
int main(){
//freopen("in.txt","r",stdin);
int i,j,k,l1,l2,l3,f1,f2,f3,t1,t2,t3;
int n,m;
cin >> n>>m>> l1;
int g1;
for(i=1;i<=l1;i++){
stack<int>qq;
t2=0;
g1=0;
memset(walk,0,sizeof(walk));
for(j=1;j<=m;j++){
cin >> t1;
walk[t1]=1;
//cout << " === " <<j<< " g1-- " << g1 <<endl;
//cout << "t1== "<< t1 << " t2 == " <<t2 << endl;
if(qq.size()==0){
for(k=t2+1;k<t1;k++)
if(walk[k]==0)qq.push(k);
if(qq.size()!=0)t2=qq.top();
else t2=t1;
if(qq.size()>=n)g1=1;
}else if(t1==t2){
qq.pop();
if(qq.size()!=0)
t2=qq.top();
else
t2=t1;
}else if(t1>t2){
for(k=t2+1;k<t1;k++)
if(walk[k]==0)qq.push(k);
t2=qq.top();
if(qq.size()>=n)g1=1;
}else{
//cout <<t1 << "--" <<t2<< endl;
g1=1;
}
}
//cout << "g1== " <<g1 <<endl;
if(g1==1)
cout << "NO" << endl;
else
cout << "YES" <<endl;
}
return 0;
}