输入:
4
4
3 2 4 2
3
1 2 3
5
2 2 3 1 1
7
4 2 3 6 1 1 8
输出:
2 1 2 1
1 1 -1
2 1 -1 1 2
2 1 1 3 1 1 4
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
void solve()
{
int n;
cin>>n;
vector<int> a(n+1),s1(n+2,0),s2(n+2,0);
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) s1[i]=s1[i-1]+a[i];
for(int i=n;i>=1;i--) s2[i]=s2[i+1]+a[i];
vector<int> q1(n+2),q2(n+1);
q1[1]=0,q2[n]=n+1;
for(int i=2;i<=n;i++)
{
if(a[i]==a[i-1]) q1[i]=q1[i-1];
else q1[i]=i-1;
}
for(int i=n-1;i>=1;i--)
{
if(a[i]==a[i+1]) q2[i]=q2[i+1];
else q2[i]=i+1;
}
vector<int> ans(n+1,1e9);
for(int i=1;i<=n;i++)
{
int l=1,r=q1[i-1];
while(l<=r)
{
int mid=(l+r)/2;
if(s1[i-1]-s1[mid-1]>a[i])
{
ans[i]=min(ans[i],i-mid);
l=mid+1;
}
else r=mid-1;
}
if(a[i-1]>a[i]) ans[i]=1;
}
for(int i=n-1;i>=1;i--)
{
int l=q2[i+1],r=n;
while(l<=r)
{
int mid=(l+r)/2;
if(s2[i+1]-s2[mid+1]>a[i])
{
ans[i]=min(ans[i],mid-i);
r=mid-1;
}
else l=mid+1;
}
if(a[i+1]>a[i]) ans[i]=1;
}
for(int i=1;i<=n;i++)
cout<<(ans[i]!=1e9?ans[i]:-1)<<" ";
cout<<endl;
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int T;
cin>>T;
while(T--) solve();
return 0;
}