前言
Pop Sequence
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
stack<int> MyStack;
queue<int> MyQueue; // 1~N
queue<int> QueueIn; // 输入的序列
bool Solution( int M ) {
int num1, num2;
while( !QueueIn.empty() ) {
num1 = QueueIn.front();
QueueIn.pop();
if( !MyQueue.empty() )
num2 = MyQueue.front();
while( num2 <= num1 && MyStack.size() < M && !MyQueue.empty() ) { // 注意确保栈大小不溢出的判断方法!
MyStack.push( num2 );
MyQueue.pop();
if( !MyQueue.empty() )
num2 = MyQueue.front();
}
if( MyStack.top() != num1 )
return false;
MyStack.pop();
}
return true;
}
int main() {
int M, N, K, num; // M:栈的大小 N:输入的最大数 K:检测次数
cin >> M >> N >> K;
for( int i = 0; i < K; i++ ) {
for( int i = 1; i <= N; i++ )
MyQueue.push( i );
for( int j = 0; j < N; j++ ) {
cin >> num;
QueueIn.push( num );
}
if( Solution( M ) ) cout << "YES" <<endl;
else cout << "NO" <<endl;
while( !QueueIn.empty() ) QueueIn.pop();
while( !MyStack.empty() ) MyStack.pop();
while( !MyQueue.empty() ) MyQueue.pop();
}
}