fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll int
  6. #define ull unsigned ll
  7. #define ld long double
  8. typedef vector<int> vi;
  9. typedef multiset<int> mi;
  10. typedef multiset<ll> mll;
  11. typedef vector<ll> vll;
  12. typedef vector<bool> vb;
  13. typedef vector<string> vs;
  14. typedef set<ll> sll;
  15. typedef vector<vector<int>> _2vi;
  16. typedef vector<vector<ll>> _2vll;
  17. #define all(v) ((v).begin()), ((v).end())
  18. #define sz(v) ((ll)((v).size()))
  19.  
  20. #define vinp(v, n) \
  21.   for (ull i = 0; i < (n); i++) \
  22.   cin >> (v)[i]
  23. #define printv(v) \
  24.   for (auto i : (v)) \
  25.   cout << i << " "
  26. #define fr0(i, n) for (ull(i) = 0; (i) < (n); (i)++)
  27. #define fr1(i, n) for (ull(i) = 1; (i) < (n); (i)++)
  28. #define fr(i, x, n) for (ull(i) = (x); (i) < (n); (i)++)
  29. #define _CRT_SECURE_NO_WARNING
  30. const ll MOD = 1000000007;
  31.  
  32. void Bustany() {
  33. ios_base::sync_with_stdio(false);
  34. cin.tie(NULL);
  35. cout.tie(NULL);
  36. #ifndef ONLINE_JUDGE
  37. freopen("./in.txt", "r", stdin), freopen("./out.txt", "w", stdout);
  38. #endif
  39. }
  40.  
  41. const ll N = 1e5 + 5;
  42. vector<sll> adj(N);
  43. //_2vll adj(N,vll(N));
  44. vb vis;
  45.  
  46. void solve() {
  47. ll n, m;
  48. cin >> n >> m;
  49. vll v(n);
  50. vinp(v, n);
  51. ll x = 0;
  52. bool equal=true;
  53. for (ll i = 0; i < n; i++) {
  54. if(v[i]!=v[0])equal=false;
  55. x |= v[i];
  56. }
  57. //here all elements should be x
  58. //sooo I should know where each bit should be found
  59. //I can make them as a pair of intervals and combine them to reach minimum operations
  60. unordered_map<ll, ll> mp;
  61. unordered_map<ll, ll> reqBits;
  62. vector<ll> req;
  63. for (ll i = 0; i < 32; i++) {
  64. for (ll r = 0; r < n; r++) {
  65. if ((v[r] & (1LL << i)) == 0 && (x & (1LL << i))) {
  66. if (!mp[r]) {
  67. mp[r] = 1;
  68. req.push_back(r);
  69. }
  70. reqBits[i]++;
  71. }
  72. }
  73. }
  74. sort(all(req));
  75. //here should combine intervals
  76. ll cnt = 0;
  77. ll r = 0;
  78. ll l = ((req.size() == 0) ? 0 : req[0]);
  79. while (r != req.size()) {
  80. while (r != req.size() && req[r] - l + 1 <= m) {
  81. r++;
  82. }
  83. cnt++;
  84. if (r != req.size()) {
  85. l = req[r];
  86. }
  87. }
  88. // cout << cnt << endl;
  89. ll q;
  90. cin >> q;
  91. while (q--) {
  92. ll y;
  93. cin >> y;
  94. if(equal) { cout << 0 << '\n';
  95. continue; }
  96. bool ok = true;
  97. for (auto i: reqBits) {
  98. if (((1LL << i.first) & y) == 0) {
  99. cout << -1 << '\n';
  100. ok = false;
  101. break;
  102. }
  103. }
  104. if (!ok)continue;
  105. for (ll i = 0; i < 31; i++) {
  106. if ((1LL << i) & y && !((1LL << i) & x)) {
  107. if(n%m==0){
  108. cout << n/m<<'\n';
  109. }
  110. else{
  111. cout << (n/m)+1<<'\n';
  112. }
  113. ok = false;
  114. break;
  115. }
  116. }
  117. if (ok)
  118. cout << cnt << '\n';
  119. }
  120. }
  121.  
  122. int main() {
  123. Bustany();
  124. ll t = 1;
  125. cin >> t;
  126. while (t--) {
  127. solve();
  128. }
  129. }
Success #stdin #stdout 0.01s 7612KB
stdin
Standard input is empty
stdout
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0