对于一个序列,每输入一个数t,如果栈不为空,就判断它与栈顶是否相等,如果等,栈顶出栈,判断下一个数;如果不等,在栈的大小允许范围内,将index入栈,每入栈一次判断一次t与
栈顶是否相等。
如果序列是符合要求的,最后的栈一定是空的,所以只要在处理完序列后判断栈有没有空即可知道序列对不对。
1 int main() {
2 int m, n, k, size, index; cin >> m >> n >> k;
3 for (int i = 0; i < k; ++i) {
4 size = 0, index = 1;
5 stack<int> s;
6 for (int j = 0; j < n; ++j) {
7 int t; cin >> t;
8 while (size <= m) {
9 if (!s.empty() && t == s.top()) {
10 size--;
11 s.pop();
12 break;
13 }
14 else {
15 s.push(index++);
16 ++size;
17 }
18 }
19 }
20 if (s.empty()) cout << "YES" << endl;
21 else cout << "NO" << endl;
22 }
23 return 0;
24 }