Advertisement
Ankit_132

D

Feb 23rd, 2024
1,214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll     long long
  6. #define _test   int _TEST; cin>>_TEST; while(_TEST--)
  7. #define pb     push_back
  8.  
  9. const int N = 3e5 + 10;
  10.  
  11. ll a[N],cnt[N],ans[N];
  12. ll pre[N];
  13.  
  14. ll sum(int l,int r)
  15. {
  16.     return pre[r]-pre[l-1];
  17. }
  18.  
  19. bool ok(int l,int r)
  20. {
  21.     if(l==r)
  22.         return 1;
  23.     return
  24.         cnt[r]-cnt[l]>0;
  25. }
  26.  
  27. int main()
  28. {
  29.     int t;
  30.     cin>>t;
  31.     while(t--)
  32.     {
  33.         int n;
  34.         cin>>n;
  35.         for(int i=1;i<=n;i++)
  36.         {
  37.             cin>>a[i];
  38.             pre[i]=a[i]+pre[i-1];
  39.             cnt[i]=(a[i]!=a[i-1])+cnt[i-1];
  40.             ans[i]=INT_MAX;
  41.         }
  42.  
  43.         for(int i=1;i<=n;i++)
  44.         {
  45.             if(i>1&&a[i-1]>a[i])
  46.                 ans[i]=1;
  47.             if(i<n&&a[i+1]>a[i])
  48.                 ans[i]=1;
  49.  
  50.             int l=1,r=i-1;
  51.             while(l<=r)
  52.             {
  53.                 ll md=(l+r)>>1;
  54.                 if(sum(md,i-1)>a[i]&&ok(md,i-1))
  55.                     ans[i]=min(ans[i],i-md),l=md+1;
  56.                 else
  57.                     r=md-1;
  58.             }
  59.  
  60.             l=i+1,r=n;
  61.             while(l<=r)
  62.             {
  63.                 ll md=(l+r)>>1;
  64.                 if(sum(i+1,md)>a[i] && ok(i+1,md))
  65.                     ans[i]=min(ans[i],md-i),r=md-1;
  66.                 else
  67.                     l=md+1;
  68.             }
  69.         }
  70.  
  71.         for(int i=1;i<=n;i++)
  72.         {
  73.             if(ans[i]==INT_MAX)
  74.                 cout<<"-1\n";
  75.             else
  76.                 cout<<ans[i]<<"\n";
  77.         }
  78.         cout<<"\n";
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement