悬棺
查看原帖
悬棺
1122029
icebear233楼主2024/11/28 22:43

线段树写的,感觉思路没问题,但是没输出。。。QWQ

#include<bits/stdc++.h>
using namespace std;
int n,ans[100000],top,ansz;
int s[100050];
int a[100050];
int t[400050];
void built(int l,int r,int p){
	if(l==r){
		t[p]=a[l];
		return ;
	}
	int mid=l+r>>1;
	built(l,mid,p*2);
	built(mid+1,r,p*2+1);
	t[p]=min(t[p*2],t[p*2+1]);
	 
}
int q(int l,int r,int ll,int rr,int p){
	if(l>=ll&&r<=rr){
		return t[p];
	}
	int mid=(l+r)>>1,ansp=1000000000;
	if(l<=mid){
		ansp=min(ansp,q(l,mid,ll,rr,p*2));
	}
	if(r>mid){
		ansp=min(ansp,q(mid+1,r,ll,rr,p*2+1));
	}
	return ansp;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		s[i]=s[i-1]+a[i];
	}
	built(1,n,1);
	for(int i=1;i<=n-2;i++){
		int t=(s[n]-s[i]-q(1,n,1,i,1))/(n-i-1);
		if(ansz<t){
			top=0;
			ansz=t;
			ans[++top]=i;
			cout<<1;
		}
		if(ansz==t){
			ans[++top]=i;
		}
	}
	for(int i=1;i<=top;i++){
		cout<<ans[i]<<'\n';
	}
	return 0;
}
2024/11/28 22:43
加载中...