158802025-03-07 12:35:22UVincePicnic's Tablecpp17Accepted 100/1002.167s235316 KiB
#include <bits/stdc++.h>
using namespace std;
using ll=long long;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    ll n;
    cin>>n;
    vector<ll> h(n+2);
    vector<ll> l(n+1),r(n+1);
    h[0]=LLONG_MAX;
    h[n+1]=LLONG_MAX;
    for (ll i=1;i<=n;i++) cin>>h[i];
    stack<ll> mx;
    mx.push(0);
    for (ll i=1;i<=n;i++){
        while (!mx.empty() && h[mx.top()]<=h[i]) mx.pop();
        l[i]=mx.top();
        mx.push(i);
    }
    stack<ll> mx2;
    mx2.push(n+1);
    for (ll i=n;i>=1;i--){
        while (!mx2.empty() && h[mx2.top()]<=h[i]) mx2.pop();
        r[i]=mx2.top();
        mx2.push(i);
    }

    ll ans=0;
    stack<ll> st;
    st.push(0);
    for (ll i=1;i<=n;i++){
        ll last=-1;
        while (!st.empty() && h[st.top()]<=h[i]) {last=st.top();st.pop();}
        st.push(i);
        if (last==-1 || h[last]!=h[i]) continue;
        st.pop();
        st.push(last);
        ll left=l[last]+1;
        ll right=r[i]-1;

        ll cur=i-last+1;
        if (last-left<right-i){
            cur+=2*(last-left);
            right-=last-left;
            ll mid = (last+i)/2;
            ll push = (i-mid)*2-1;
            if (mid*2!=last+i) push--;
            cur+=min(right-i, push);
        }
        else {
            cur+=2*(right-i);
            left+=right-i;
            ll mid = (last+i)/2;
            ll push = (mid-last)*2-1;
            if (mid*2!=last+i) push++;
            cur+=min(last-left, push);
        }
        ans=max(ans, cur);
    }
    cout<<ans;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms508 KiB
2Accepted1ms316 KiB
subtask210/10
3Accepted1ms316 KiB
4Accepted1ms316 KiB
5Accepted109ms23672 KiB
6Accepted119ms23916 KiB
7Accepted112ms23864 KiB
subtask315/15
8Accepted1ms316 KiB
9Accepted1ms316 KiB
10Accepted1ms500 KiB
11Accepted1ms316 KiB
12Accepted1ms316 KiB
13Accepted1ms316 KiB
14Accepted1ms316 KiB
subtask415/15
15Accepted2ms316 KiB
16Accepted1ms316 KiB
17Accepted1ms316 KiB
18Accepted2ms320 KiB
19Accepted2ms316 KiB
20Accepted1ms316 KiB
21Accepted2ms316 KiB
subtask525/25
22Accepted21ms2612 KiB
23Accepted21ms2612 KiB
24Accepted21ms2612 KiB
25Accepted1ms316 KiB
26Accepted20ms2612 KiB
27Accepted1ms512 KiB
28Accepted1ms316 KiB
29Accepted19ms2612 KiB
30Accepted14ms2788 KiB
subtask635/35
31Accepted1.86s235160 KiB
32Accepted2.099s235060 KiB
33Accepted2.048s235252 KiB
34Accepted2.167s235316 KiB
35Accepted1ms316 KiB
36Accepted1.664s235064 KiB
37Accepted1.616s235176 KiB
38Accepted1ms316 KiB
39Accepted1ms316 KiB
40Accepted1.485s235060 KiB