#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const int N = 100010;
const int INF = 0x3f3f3f3f;
LL a[N];
LL s[N],s1[N],s2[N];
int n,k;
LL sum;
LL solve()
{
for(int i=n;i>=1;i--)
{
if(a[i]%a[i-1]==0) s1[i] =a[i]/a[i-1]/2;
else
{
s1[i] = 1;
LL b=a[i];
while(b%2==0)
{
s1[i] *= 2;
b /= 2;
}
}
s1[n+1] = 0;
s1[i] += s1[i+1];
}//后缀和
for(int i=1;i<=n;i++)
{
if(a[i]%a[i+1]==0) s2[i] =a[i]/a[i+1]/2;
else
{
s2[i] = 1;
LL b=a[i];
while(b%2==0)
{
s2[i] *= 2;
b /= 2;
}
}
s2[0] = 0;
s2[i] += s2[i-1];
}//前缀和
for(int i=1;i<=n;i++)
{
LL b = a[i];
s[i] = 1;
while(b%2==0)
{
s[i] *= 2;
b /= 2;
}
}
LL res = 0;
for(int i=1;i<=n;i++)
{
res = max(res,s[i]+s2[i-1]+s1[i+1]);
}
return res;
}
int main()
{
int T;
cin >> T;
while(T--)
{
memset(a,0,sizeof a);
memset(s1,0,sizeof s1);
memset(s2,0,sizeof s2);
memset(s,0,sizeof s);
n=0,k=0;
cin >> n >> k;
for(int i=1;i<=n;i++) cin >> a[i];
a[0] = INF, a[n+1] = INF;
LL sum = solve();
if(k<=sum&&k>=n) cout << "YES" << endl;
else cout << "NO" << endl;
}
}
1
5 7
4 5 9 5 2
NO
为什么过不了啊?