#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
vector<int> tab(n);
vector<int> poz(n, -1);
for(int i=0;i<n;i++)
{
cin >> tab[i];
}
stack<int> kol;
for(int i=n-1;i>=0;i--)
{
while(!kol.empty())
{
if(tab[kol.top()] > tab[i])
{
break;
}
kol.pop();
}
if(!kol.empty())
{
poz[i] = kol.top();
}
kol.push(i);
}
int ind = 0;
vector<int> prz;
vector<int> inde;
while(ind > -1)
{
prz.push_back(tab[ind]);
inde.push_back(ind);
ind = poz[ind];
}
kol = stack<int>();
int wyn = 0, ma = 0, dl, bns;
/*for(int i=0;i<prz.size();i++)
{
cout << prz[i].second << ' ';
}
cout << '\n';*/
for(int i=n-1;i>=0;i--)
{
ma = max(ma, tab[i]);
while(!kol.empty())
{
if(kol.top() > tab[i])
{
break;
}
kol.pop();
}
kol.push(tab[i]);
dl = kol.size();
if(inde[inde.size()-1] == i)
{
prz.pop_back();
inde.pop_back();
}
bns = upper_bound(prz.begin(), prz.end(), ma)-prz.begin();
wyn = max(wyn, dl+(int)prz.size()-bns);
//cout << wyn << ' ' << ma << ' ' << dl << ' ' << bns << ' ' << prz.size() << '\n';
}
cout << wyn;
return 0;
}
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; vector<int> tab(n); vector<int> poz(n, -1); for(int i=0;i<n;i++) { cin >> tab[i]; } stack<int> kol; for(int i=n-1;i>=0;i--) { while(!kol.empty()) { if(tab[kol.top()] > tab[i]) { break; } kol.pop(); } if(!kol.empty()) { poz[i] = kol.top(); } kol.push(i); } int ind = 0; vector<int> prz; vector<int> inde; while(ind > -1) { prz.push_back(tab[ind]); inde.push_back(ind); ind = poz[ind]; } kol = stack<int>(); int wyn = 0, ma = 0, dl, bns; /*for(int i=0;i<prz.size();i++) { cout << prz[i].second << ' '; } cout << '\n';*/ for(int i=n-1;i>=0;i--) { ma = max(ma, tab[i]); while(!kol.empty()) { if(kol.top() > tab[i]) { break; } kol.pop(); } kol.push(tab[i]); dl = kol.size(); if(inde[inde.size()-1] == i) { prz.pop_back(); inde.pop_back(); } bns = upper_bound(prz.begin(), prz.end(), ma)-prz.begin(); wyn = max(wyn, dl+(int)prz.size()-bns); //cout << wyn << ' ' << ma << ' ' << dl << ' ' << bns << ' ' << prz.size() << '\n'; } cout << wyn; return 0; } |
English