这题其实不用看整段区间,只要看相邻两个数就够了,因为想让区间里的最大值尽量大,最后只会落到某一对相邻元素上。

于是直接枚举每一对相邻数,算出这两个数的 mex,再取“max−mex”的最大值,答案就是这样。

void solve(){
    int n;cin>>n;
    vi a(n);
    for(int i=0;i<n;++i)cin>>a[i];
    ll ans=-LINF;
    for(int i=0;i<n-1;++i){
        int x=a[i],y=a[i+1];
        bool has0=(x==0||y==0);
        bool has1=(x==1||y==1);
        int mex=0;
        if(has0){
            mex=has1?2:1;
        }
        ll cur=max(x,y)-mex;
        ans=max(ans,cur);
    }
    cout<<ans<<endl;
}