这题其实不用看整段区间,只要看相邻两个数就够了,因为想让区间里的最大值尽量大,最后只会落到某一对相邻元素上。
于是直接枚举每一对相邻数,算出这两个数的 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;
}

京公网安备 11010502036488号