求调,玄小号关
  • 板块CF1923D Slimes
  • 楼主scyFBM
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/10 17:44
  • 上次更新2024/6/10 20:54:15
查看原帖
求调,玄小号关
766405
scyFBM楼主2024/6/10 17:44
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=300009;
int t,n,a[N],s[N],s2[N];
bool check(int i,int x){
	if(i>x&&s2[i-1]!=s2[i-x]&&(s[i-1]-s[i-x-1]>a[i])) return 1;
	if((i+x)<=n&&s2[i+1]!=s2[i+x]&&(s[i+x]-s[i]>a[i])) return 1;
	return 0;
}
signed main(){
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			s[i]=s[i-1]+a[i];
			s2[i]=s2[i-1]+abs(a[i]-a[i-1]);
		}
		int l,r,ans;
		for(int i=1;i<=n;i++){
			if(a[i+1]>a[i]||a[i-1]>a[i]){
				cout<<1<<" ";
				continue;
			}
			l=2,r=max(i-1,n-i),ans=-1;
			while(l<=r){
				int mid=(l+r)>>1;
				if(check(i,mid)) r=mid-1,ans=mid;
				else l=mid+1;
			}
			cout<<ans<<" ";
		}
		puts("");
	}
	return 0;
}

记录

2024/6/10 17:44
加载中...