#include<iostream>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
int M, N, K;
bool isOver(vector<int>& v) {
stack<int> s;
for (int i = 0; i < v.size(); i++)
{
while (!s.empty() && s.top() < v[i])
s.pop();
s.push(v[i]);
if (s.size() > M)
return true;
}
return false;
}
bool isRight(vector<int>& v) {
int Max = v[0];
for (int i = 1; i < v.size(); i++)
{
if (v[i]>v[i-1])
{
if (v[i]<Max)
return false;
}
if (v[i]>Max)
{
Max = v[i];
}
}
return true;
}
int main() {
cin >> M >> N >> K;
vector<int> v(N);
for (int i = 0; i < K; i++)
{
for (int j = 0; j < N; j++)
cin >> v[j];
if (isOver(v))
{
printf("NO\n");
}
else
{
if (isRight(v))
printf("YES\n");
else
printf("NO\n");
}
}
system("pause");
return 0;
}
题目给你的数组如果出现上图所示的变化趋势,则必不正确,如果没出现,则必定正确。
以567为例
如果出现756这样的顺序,要么6在5前面入栈,7再入栈,三个一起弹出;要么,7和5弹出之后,6再入栈再弹出,所以必不可行。