Как реализовать код а именно нужно создать 2 стека. Один для хранения желудей, другой – для хранения текущей максимальной ценности желудя. Когда белка добавляет новый желудь к первому стеку, мы также добавляем некоторое значение ко второму. Если ценность нового желудя выше текущего максимального значения, то вносится новое значение, если меньше – дублируется предыдущий максимум.
Соответственно, когда белка съедает желудь, мы удаляем верхнее значение как из первого стека, так и со второго. Значение, оставшееся на горе второго стека – текущий максимум, его и выводим.
Входные данные #1:
8
3
2
4
0
4
3
0
0
Исходные данные 1:
3
4
3
#include <iostream>
#include <stack>
using namespace std;
int main() {
int n, max_quality = 0;
stack<int> s;
cin >> n;
for (int i = 0; i < n; i++) {
int event;
cin >> event;
if (event == 0) {
// если извлекаем желудь, то выводим максимальное качество
int top = s.top();
s.pop();
if (top == max_quality) {
// если извлеченный желудь имел максимальное качество,
// то нужно пересчитать максимальное качество для оставшихся желудей
max_quality = 0;
stack<int> tmp;
while (!s.empty()) {
int cur = s.top();
s.pop();
max_quality = max(max_quality, cur);
tmp.push(cur);
}
while (!tmp.empty()) {
int cur = tmp.top();
tmp.pop();
s.push(cur);
}
}
cout << max_quality << endl;
} else {
// если нашли новый желудь, то добавляем его в стек
s.push(event);
max_quality = max(max_quality, event);
}
}
return 0;
}