80分求助,悬赏关注一个
查看原帖
80分求助,悬赏关注一个
664794
nie123楼主2022/9/16 11:35

rt

代码如下:

#include<cstdio>
using namespace std;
inline int read(){//快读 
	int x=0;
	bool f=1;
	char ch=getchar();
	while(ch>'9'||ch<'0'){
		if(ch=='-') f=0;
		ch=getchar();
	}
	while(ch<='9'&&ch>='0'){
		x=(x<<3)+(x<<1)+(ch^48);
		ch=getchar();
	}
	return f?x:-x;
}
inline int max(int x,int y){
	return x>y?x:y;
}
int a[4000009];
int main(){
	// 
	int n=read();
	for(int i=1;i<=n;++i)
		a[i]=read();
	int l=1;
	int ans=1<<31;
	int maxx=a[l];
	for(int r=l+1;r<=n;++r){
		maxx=max(a[r],maxx);
		if(a[r]<=a[l]){//更新左端点 
			l=r;
			maxx=a[r];//此时,原来的最大值已经不在区间内了,更新掉 
		}
		ans=max(maxx-a[l]-(r-l+1),ans);
	}
	l=n;
	maxx=a[l];
	for(int r=l-1;r>=1;--r){
		maxx=max(a[r],maxx);
		if(a[r]<=a[l]){
			l=r;
			maxx=a[r];
		}
		ans=max(maxx-a[l]-(l-r+1),ans);
	}
	printf("%d",ans);
	return 0;
}

2022/9/16 11:35
加载中...