fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int MAXN = 2e5 + 5;
  5. int a[MAXN];
  6. int A0[MAXN];
  7. int A1[MAXN];
  8. int AD_[MAXN];
  9.  
  10. void solve() {
  11. int n, q;
  12. if (!(cin >> n >> q)) return;
  13.  
  14. for (int i = 0; i < n; ++i) {
  15. cin >> a[i];
  16. }
  17.  
  18. A0[0] = 0;
  19. A1[0] = 0;
  20. AD_[0] = 0;
  21.  
  22. for (int i = 0; i < n; ++i) {
  23. A0[i + 1] = A0[i] + (a[i] == 0);
  24. A1[i + 1] = A1[i] + (a[i] == 1);
  25. }
  26.  
  27. for (int i = 0; i < n - 1; ++i) {
  28. AD_[i + 1] = AD_[i] + (a[i] == a[i + 1]);
  29. }
  30.  
  31. for (int k = 0; k < q; ++k) {
  32. int l, r;
  33. if (!(cin >> l >> r)) return;
  34.  
  35. int count0 = A0[r] - A0[l - 1];
  36. int count1 = A1[r] - A1[l - 1];
  37.  
  38. int total_cost = -1;
  39.  
  40. if (count0 % 3 == 0 && count1 % 3 == 0) {
  41. int total_ops = (int)(count0 / 3) + (int)(count1 / 3);
  42.  
  43. total_cost = total_ops;
  44.  
  45. if (count0 == count1) {
  46.  
  47. int adjacent_equal_count = AD_[r - 1] - AD_[l - 1];
  48.  
  49. if (adjacent_equal_count == 0) {
  50. total_cost += 1;
  51. }
  52. }
  53. }
  54.  
  55. cout << total_cost << "\n";
  56. }
  57. }
  58.  
  59. int main() {
  60. ios_base::sync_with_stdio(false);
  61. cin.tie(NULL);
  62.  
  63. int t;
  64. cin >> t;
  65. while (t--) {
  66. solve();
  67. }
  68.  
  69. return 0;
  70. }
Success #stdin #stdout 0.01s 5508KB
stdin
2
12 4
0 0 1 1 0 1 0 1 0 1 1 0
1 12
2 7
5 10
6 11
6 3
0 0 0 1 1 1
1 3
4 6
1 6
stdout
4
2
3
-1
1
1
2