大模拟题, 注意size() 返回值为unsigned int 不能直接作为max() 函数的参数
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
stack<int> st, h;
queue<int> q;
int res, k;
int main (void) {
int n;
scanf("%d", &n);
while (n -- ) {
int x;
scanf("%d", &x);
q.push(x);
}
h.push(q.front());
q.pop();
while (q.size()) {
if (q.front() < h.top()) {
h.push(q.front());
q.pop();
}
else if (q.front() >= h.top()) {
if (st.size() == 0 || q.front() > st.top()) {
st.push(q.front());
q.pop();
}
else {
k = max(k, (int)h.size());
res++;
while (h.size()) h.pop();
while (st.size() && st.top() > q.front()) {
h.push(st.top());
st.pop();
}
h.push(q.front());
q.pop();
}
}
}
k = max(k, (int)h.size());
res++;
if (st.size()) k = max(k, (int) st.size()), res++;
cout << res << " " << k << endl;
return 0;
}