ABDELRHMAN_SAEED007

G. Shorten the Array

Oct 5th, 2025
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.25 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ld long double
  4. #define F first
  5. #define S second
  6. #define Lnode 2*node+1
  7. #define Rnode 2*node+2
  8. #define MID (l+r>>1)
  9. #define el '\n'
  10. #define coutf(x) for(auto v:(x)) cout<<v<<' '; cout<<el
  11. #define coutp(x) for(auto v:(x)) cout<<v.F<<' '<<v.S<<el
  12. #define cinl(x) for(auto &v:(x)) cin>>v;
  13. #define all(x)  x.begin(),x.end()
  14. #define ll long long
  15. #define sz(x)  (int)x.size()
  16. #define pi pair<ll,ll>
  17. #define pii pair<ll,pair<ll,ll>>
  18. #define vi vector<ll>
  19. using ull = unsigned long long;
  20. const int N=32*200005;
  21. int trie[N][2];
  22. int cnt[N];
  23. int nodecnt;
  24.  
  25. void prepare() {
  26.     trie[0][0]=trie[0][1]=-1;
  27.     cnt[0]=-1;
  28.     nodecnt=1;
  29. }
  30.  
  31.  
  32. ll insert(int n,int idx)
  33. {
  34.    int node=0;
  35.     for (int i=30;i>=0;i--)
  36.     {
  37.         int bit=((n>>i)&1LL);
  38.         if (trie[node][bit]==-1)
  39.         {
  40.             trie[node][bit]=nodecnt;
  41.             trie[nodecnt][0]=trie[nodecnt][1]=-1;
  42.             cnt[nodecnt] = -1;
  43.             nodecnt++;
  44.         }
  45.         node=trie[node][bit];
  46.         cnt[node]=idx;
  47.     }
  48. }
  49.  
  50.  
  51. ll mx(ll n,ll k)
  52. {
  53.  
  54.     int node=0;
  55.     ll num=0;
  56.     for (int i=30;i>=0;i--)
  57.     {
  58.         int bit=((n>>i)&1LL);
  59.         if (trie[node][1^bit]!=-1)
  60.         {
  61.             num|=(1LL<<i);
  62.             node=trie[node][1^bit];
  63.         }
  64.         else if (trie[node][bit]!=-1)node=trie[node][bit];
  65.         else return -1;
  66.         if (num>=k)return cnt[node];
  67.  
  68.     }
  69.  
  70.    if (num>=k)
  71.         return cnt[node];
  72.     return -1;
  73.  
  74. }
  75.  
  76.  
  77. void solve()
  78. {
  79.     int n,k;
  80.     cin>>n>>k;
  81.     vector<ll>ar(n);
  82.     for (int i=0;i<n;i++)cin>>ar[i];
  83.     if (k==0)
  84.     {
  85.         cout<<1<<"\n";
  86.         return;
  87.     }
  88.     prepare();
  89.     insert(ar[0],0);
  90.     int ans=INT_MAX;
  91.     for (int i=1;i<n;i++)
  92.     {
  93.         int idx=mx(ar[i],k);
  94.  
  95.  
  96.         if (idx!=-1)ans=min(ans,i-idx+1);
  97.         insert(ar[i],i);
  98.     }
  99.  
  100.     if (ans==INT_MAX)cout<<-1<<"\n";
  101.     else cout<<ans<<"\n";
  102. }
  103.  
  104.  
  105.  
  106.  
  107. int32_t main()
  108. {
  109. // #ifndef ONLINE_JUDGE
  110. //     freopen("in.txt", "r", stdin);
  111. //     //freopen("output.txt", "w", stdout);
  112. // #endif
  113.  
  114.  
  115.     ios_base::sync_with_stdio(false);
  116.     cin.tie(NULL);
  117.     int tc = 1;
  118.     cin >> tc;
  119.     for (int i = 1; i <= tc; i++)solve();
  120.     return 0;
  121. }
  122. /*
  123. */
Advertisement
Add Comment
Please, Sign In to add comment