fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define SZ(A) int(A.size())
  6. #define fr first
  7. #define sc second
  8.  
  9. typedef long long ll;
  10. typedef pair<int, int> ii;
  11. typedef vector<int> vi;
  12.  
  13. const int N = int(1e6) + 5;
  14. int A3[N], A2[N], Vis[N];
  15. int main() {
  16. int n, q, A; scanf("%d %d", &n, &q);
  17. for(int i = 0; i < n; i++) {
  18. scanf("%d", &A);
  19. if(!i) {
  20. Vis[A]++, A2[i] = (A%3 == 2),
  21. A3[i] = (A == 3);
  22. }else {
  23. if(!Vis[A])
  24. Vis[A]++, A2[i] = A2[i - 1] + (A%3 == 2),
  25. A3[i] = A3[i - 1] + (A == 3);
  26.  
  27. else A2[i] = A2[i - 1] - (A%3 == 2),
  28. A3[i] = A3[i - 1] - (A == 3);
  29. }
  30. }
  31. while(q--) {
  32. int l, r; scanf("%d %d", &l, &r);
  33. --l, --r;
  34. if(l) {
  35. if(A3[r] >= A3[l - 1] && A3[r] - A3[l - 1]) puts("0");
  36. else if(A2[r] >= A2[l - 1] && ((A2[r] - A2[l - 1]) & 1)) puts("2");
  37. if(A3[r] < A3[l - 1] && A3[r] + A3[l - 1]) puts("0");
  38. else if(A2[r] < A2[l - 1] && (A2[r] + A2[l - 1]) & 1) puts("2");
  39. else puts("1");
  40. }else {
  41. if(A3[r]) puts("0");
  42. else if(A2[r] & 1) puts("2");
  43. else puts("1");
  44. }
  45. }
  46. return 0;
  47. }
Success #stdin #stdout 0s 14864KB
stdin
10 3
3 5 11 3 7 13 5 7 11 13
2 4
2 3
5 9
stdout
0
1
1