Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ld long double
- #define F first
- #define S second
- #define Lnode 2*node+1
- #define Rnode 2*node+2
- #define MID (l+r>>1)
- #define el '\n'
- #define coutf(x) for(auto v:(x)) cout<<v<<' '; cout<<el
- #define coutp(x) for(auto v:(x)) cout<<v.F<<' '<<v.S<<el
- #define cinl(x) for(auto &v:(x)) cin>>v;
- #define all(x) x.begin(),x.end()
- #define ll long long
- #define sz(x) (int)x.size()
- #define pi pair<ll,ll>
- #define pii pair<ll,pair<ll,ll>>
- #define vi vector<ll>
- using ull = unsigned long long;
- const int N=32*200005;
- int trie[N][2];
- int cnt[N];
- int nodecnt;
- void prepare() {
- trie[0][0]=trie[0][1]=-1;
- cnt[0]=-1;
- nodecnt=1;
- }
- ll insert(int n,int idx)
- {
- int node=0;
- for (int i=30;i>=0;i--)
- {
- int bit=((n>>i)&1LL);
- if (trie[node][bit]==-1)
- {
- trie[node][bit]=nodecnt;
- trie[nodecnt][0]=trie[nodecnt][1]=-1;
- cnt[nodecnt] = -1;
- nodecnt++;
- }
- node=trie[node][bit];
- cnt[node]=idx;
- }
- }
- ll mx(ll n,ll k)
- {
- int node=0;
- ll num=0;
- for (int i=30;i>=0;i--)
- {
- int bit=((n>>i)&1LL);
- if (trie[node][1^bit]!=-1)
- {
- num|=(1LL<<i);
- node=trie[node][1^bit];
- }
- else if (trie[node][bit]!=-1)node=trie[node][bit];
- else return -1;
- if (num>=k)return cnt[node];
- }
- if (num>=k)
- return cnt[node];
- return -1;
- }
- void solve()
- {
- int n,k;
- cin>>n>>k;
- vector<ll>ar(n);
- for (int i=0;i<n;i++)cin>>ar[i];
- if (k==0)
- {
- cout<<1<<"\n";
- return;
- }
- prepare();
- insert(ar[0],0);
- int ans=INT_MAX;
- for (int i=1;i<n;i++)
- {
- int idx=mx(ar[i],k);
- if (idx!=-1)ans=min(ans,i-idx+1);
- insert(ar[i],i);
- }
- if (ans==INT_MAX)cout<<-1<<"\n";
- else cout<<ans<<"\n";
- }
- int32_t main()
- {
- // #ifndef ONLINE_JUDGE
- // freopen("in.txt", "r", stdin);
- // //freopen("output.txt", "w", stdout);
- // #endif
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- int tc = 1;
- cin >> tc;
- for (int i = 1; i <= tc; i++)solve();
- return 0;
- }
- /*
- */
Advertisement
Add Comment
Please, Sign In to add comment