fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. // Speed
  5. #define fast_io ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  6.  
  7. // Typedefs
  8. #define int long long
  9. #define pb push_back
  10. #define ff first
  11. #define ss second
  12. #define all(x) (x).begin(), (x).end()
  13. #define rall(x) (x).rbegin(), (x).rend()
  14. #define sz(x) ((int)(x).size())
  15. #define endl '\n'
  16. #define yes cout << "yes\n"
  17. #define no cout << "no\n"
  18.  
  19. // Loops
  20. #define rep(i,a,b) for(int i=a;i<b;++i)
  21. #define per(i,a,b) for(int i=b-1;i>=a;--i)
  22. #define each(x, a) for (auto& x : a)
  23.  
  24. // Consts
  25. const int INF = 1e18;
  26. const int MOD = 1e9+7;
  27. const int N = 2e5 + 5;
  28.  
  29. // Math
  30. int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
  31. int lcm(int a, int b) { return (a / gcd(a, b)) * b; }
  32.  
  33. int power(int a, int b, int m = MOD) {
  34. int res = 1;
  35. while (b > 0) {
  36. if (b & 1) res = res * a % m;
  37. a = a * a % m;
  38. b >>= 1;
  39. }
  40. return res;
  41. }
  42.  
  43. int modinv(int a, int m = MOD) {
  44. return power(a, m - 2, m);
  45. }
  46.  
  47. // Logic
  48. void solve() {
  49. int n, m;
  50. cin >> n >> m;
  51. vector<long long> odd_vals, even_vals;
  52. long long total_sum = 0;
  53. for (int i = 1; i <= n; i++) {
  54. long long val;
  55. cin >> val;
  56. total_sum += val;
  57. if (i % 2 != 0) {
  58. odd_vals.push_back(val);
  59. } else {
  60. even_vals.push_back(val);
  61. }
  62. }
  63.  
  64. int odd_marks = 0, even_marks = 0;
  65. for (int i = 0; i < m; i++) {
  66. int x;
  67. cin >> x;
  68. if (x % 2 != 0) {
  69. odd_marks++;
  70. } else {
  71. even_marks++;
  72. }
  73. }
  74.  
  75. sort(odd_vals.rbegin(), odd_vals.rend());
  76. sort(even_vals.rbegin(), even_vals.rend());
  77.  
  78. long long marked_sum = 0;
  79.  
  80. if (odd_marks > 0 && !odd_vals.empty()) {
  81. marked_sum += odd_vals[0];
  82. int limit = min((int)odd_marks, (int)odd_vals.size());
  83. for (int i = 1; i < limit; i++) {
  84. if (odd_vals[i] > 0) {
  85. marked_sum += odd_vals[i];
  86. }
  87. }
  88. }
  89.  
  90. if (even_marks > 0 && !even_vals.empty()) {
  91. marked_sum += even_vals[0];
  92. int limit = min((int)even_marks, (int)even_vals.size());
  93. for (int i = 1; i < limit; i++) {
  94. if (even_vals[i] > 0) {
  95. marked_sum += even_vals[i];
  96. }
  97. }
  98. }
  99. cout << total_sum - marked_sum << "\n";
  100. }
  101.  
  102. // Main
  103. int32_t main() {
  104. fast_io;
  105.  
  106. int t;
  107. cin >> t;
  108. while (t--) {
  109. solve();
  110. }
  111.  
  112. return 0;
  113. }
  114.  
Success #stdin #stdout 0s 5324KB
stdin
6
7 4
1 2 3 4 5 6 7
1 2 3 4
7 4
1 -2 3 4 -5 -6 -7
7 6 5 4
7 5
21 -45 234 -8 423 12 -987
6 6 6 6 6
7 5
-21 45 -234 8 -423 -12 987
7 7 7 7 7
7 3
-1 2 -3 4 5 6 7
1 2 3
7 3
-1 -2 -3 -4 -5 -6 -7
1 2 3
stdout
6
-20
-362
-637
2
-25