#include <bits/stdc++.h>
#define pb push_back
#define ob pop_back
#define pf push_front
#define of pop_front
using namespace std;
void dodaj_f(int val, int p, deque<pair<int, int>> &q){
while (q.size() > 0 and q.front().first <= val){
q.of();
}
q.pf({val, p});
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
deque<pair<int, int>> dq;
deque<pair<int, int>> q;
for (int i = 0; i < n; ++i){
int c; cin >> c;
dq.pb({c, i});
if (q.size() == 0 or q.back().first < c){
q.pb({c, i});
}
}
int maxw = q.size();
for (int i = 0; i < n; ++i){
pair<int, int> a = dq.back();
dq.ob();
if (q.back() == a) q.ob();
dodaj_f(a.first, a.second, q);
maxw = max(maxw, (int)q.size());
}
cout << maxw << endl;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <bits/stdc++.h> #define pb push_back #define ob pop_back #define pf push_front #define of pop_front using namespace std; void dodaj_f(int val, int p, deque<pair<int, int>> &q){ while (q.size() > 0 and q.front().first <= val){ q.of(); } q.pf({val, p}); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; deque<pair<int, int>> dq; deque<pair<int, int>> q; for (int i = 0; i < n; ++i){ int c; cin >> c; dq.pb({c, i}); if (q.size() == 0 or q.back().first < c){ q.pb({c, i}); } } int maxw = q.size(); for (int i = 0; i < n; ++i){ pair<int, int> a = dq.back(); dq.ob(); if (q.back() == a) q.ob(); dodaj_f(a.first, a.second, q); maxw = max(maxw, (int)q.size()); } cout << maxw << endl; } |
English