fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. #define fi first
  5. #define se second
  6. #define siz(x) (int)(x.size())
  7. #define all(x) x.begin(), x.end()
  8. #define debug_arr(x,len) for(int _=1; _<=len; _++) cout<<x[_]<<" "; cout<<'\n';
  9. #define debug(x) cout<<'\n'<<#x<<": "<<x<<'\n';
  10. int lg2(const int &x){return 31 - __builtin_clz(x);}
  11. const int maxN = 2e5+5;
  12.  
  13. int n, a[maxN];
  14. void solve()
  15. {
  16.  
  17. }
  18.  
  19. int32_t main()
  20. {
  21. ios_base::sync_with_stdio(0); cin.tie(0);
  22. int test=1;
  23. cin>>test;
  24. while(test--)
  25. {
  26. cin>>n;
  27. for(int i=1; i<=n; i+=1) cin>>a[i];
  28. int dem = 0, need = lg2(n);
  29. for(int i=1; i<=n; i+=1)
  30. {
  31. while(a[i] % 2 == 0)
  32. {
  33. dem++;
  34. a[i] /= 2;
  35. }
  36. }
  37. vector<int>v;
  38. for(int i=1; i<=n; i+=1)
  39. {
  40. int tmp = 0, x = i;
  41. if(x % 2 == 0)
  42. {
  43. while(x % 2 == 0)
  44. {
  45. tmp++;
  46. x /= 2;
  47. }
  48. v.push_back(tmp);
  49. }
  50. }
  51. sort(all(v), greater<int>());
  52. int ans = 0;
  53. for(int i=0; i<siz(v); i+=1)
  54. {
  55. ans++;
  56. dem += v[i];
  57. if(dem >= need) break;
  58. }
  59. if(dem < need) cout<<-1<<'\n';
  60. else cout<<ans<<'\n';
  61. solve();
  62. }
  63. }
Success #stdin #stdout 0.01s 5288KB
stdin
6
1
2
2
3 2
3
10 6 11
4
13 17 1 1
5
1 1 12 1 1
6
20 7 14 18 3 5
stdout
0
1
1
1
1
1