求调
查看原帖
求调
1086453
__CJY__楼主2024/12/14 20:58
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
int a[maxn],l[maxn],r[maxn],ans[maxn],n,t,s;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i],a[n+i]=i;
	l[1]=0;
	for(int i=2;i<=n*2;i++){
		int x=i-1;
		while(a[x]>=a[i]&&x) x=l[x];
		l[i]=x; 
	}
	r[n*2]=n*2+1;
	for(int i=n*2-1;i;i--){
		int x=i+1;
		while(a[x]>a[i]&&x&&x!=n*2+1) x=r[x];
		r[i]=x;
	}
	for(int i=1;i<=n;i++){
		if(a[i]<a[t]||!t) t=i;
		s+=a[i];
	}
	for(int i=t+1;i<=t+n;i++){
		if(a[i]==a[t]) continue;
		int x=r[i]-l[i]-1,y=a[i]-max(a[l[i]]+1,a[r[i]]+1)+1;
		ans[1]+=y,ans[x+1]-=y;
	}
	for(int i=1;i<=n;i++) ans[i]+=ans[i-1];
	for(int i=1;i<=n;i++) ans[i]+=ans[i-1],cout<<s-ans[i]<<' ';
}

哪儿错了?

2024/12/14 20:58
加载中...