fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long
  5. #define FOR(i, a, b) for (int i = (a); i <= (b); i ++)
  6. #define fi first
  7. #define se second
  8. #define endl '\n'
  9.  
  10. const int N = 2e5 + 5;
  11.  
  12. int n, q;
  13. int kem[N], rd[N], id[N];
  14.  
  15. int main()
  16. {
  17.  
  18. cin >> n >> q;
  19.  
  20. int gv, ht;
  21.  
  22. FOR(i, 1, n)
  23. {
  24. cin >> id[i];
  25. if (id[i] == 0) ht = i;
  26. }
  27.  
  28. FOR(i, 1, q)
  29. {
  30. int t;
  31. cin >> t;
  32.  
  33. if (t == 1)
  34. {
  35. int a, b;
  36. cin >> a>> b;
  37.  
  38. if (id[a] < 2)
  39. {
  40. rd[i] = b;
  41. kem[b] ++;
  42. if (id[a] == 1 && id[b] == 2)
  43. {
  44. kem[ht] ++;
  45. rd[i] = - b - 1;
  46. }
  47. }
  48. else
  49. {
  50. if (id[b] != 1)
  51. {
  52. kem[b] ++;
  53. rd[i] = b;
  54. }
  55. else
  56. {
  57. gv ++;
  58. kem[ht] ++;
  59. rd[i] = 0;
  60. }
  61. }
  62. }
  63. else if (t == 2)
  64. {
  65. int a, x;
  66. cin >> a >> x;
  67.  
  68. if (id[a] == 0)
  69. {
  70. if (rd[x] <= 0 || rd[x] == a) kem[a] --;
  71. }
  72. else if (id[a] == 2)
  73. {
  74. if (rd[x] == a || rd[x] == - a - 1) kem[a] --;
  75. }
  76. else
  77. {
  78. if (rd[x] == 0)
  79. {
  80. gv --;
  81. rd[x] = -1;
  82. }
  83. else if (rd[x] == a) kem[a] --;
  84. }
  85. }
  86. else
  87. {
  88. int a;
  89. cin >> a;
  90. if (id[a] == 1) cout << kem[a] + gv << endl;
  91. else cout << kem[a] << endl;
  92. }
  93.  
  94. }
  95. return 0;
  96. }
  97.  
  98. //7 22
  99. //1 0 1 1 2 2 2
  100. //1 1 2
  101. //2 1 1
  102. //1 2 3
  103. //1 2 1
  104. //1 1 3
  105. //1 4 5
  106. //1 2 6
  107. //1 3 7
  108. //1 7 6
  109. //1 6 1
  110. //1 5 4
  111. //2 2 11
  112. //2 3 11
  113. //2 2 8
  114. //2 3 6
  115. //3 3
  116. //2 2 6
  117. //2 6 6
  118. //2 6 9
  119. //2 3 7
  120. //2 3 5
  121. //2 2 1
  122.  
  123.  
Success #stdin #stdout 0.01s 5276KB
stdin
4 5
0 1 1 2
1 2 4
1 4 2
2 3 2
3 1
3 2
stdout
2
22025