fork download
  1. import java.util.*;
  2.  
  3. public class Main {
  4. public static void buildTree(int[] arr,int[][] tree,int start,int end,int treeNode){
  5. if(start==end){
  6. if(arr[start]%2==0){
  7. tree[treeNode][0] = 1;
  8. }else{
  9. tree[treeNode][1] = 1;
  10. }
  11. return;
  12. }
  13. int mid = start + (end-start)/2;
  14. buildTree(arr,tree,start,mid,2*treeNode);
  15. buildTree(arr,tree,mid+1,end,2*treeNode+1);
  16. tree[treeNode][0] = tree[2*treeNode][0] + tree[2*treeNode+1][0];
  17. tree[treeNode][1] = tree[2*treeNode][1] + tree[2*treeNode+1][1];
  18. return ;
  19. }
  20. public static int findCount(int[][] tree,int l,int r,int start,int end,int treeNode,int odd){
  21. if(start>r || end<l){
  22. return 0;
  23. }
  24. if(start>=l&&end<=r){
  25. return tree[treeNode][odd];
  26. }
  27. int mid = start + (end-start)/2;
  28. int one = findCount(tree,l,r,start,mid,2*treeNode,odd);
  29. int two = findCount(tree,l,r,mid+1,end,2*treeNode+1,odd);
  30. return one+two;
  31. }
  32. public static void updateTree(int[][] tree,int index,int value,int start,int end,int treeNode){
  33. if(start>index || end<index){
  34. return;
  35. }
  36. if(start==end){
  37. if(value%2==0){
  38. tree[treeNode][0] = 1;
  39. tree[treeNode][1] = 0;
  40. }else{
  41. tree[treeNode][0] = 0;
  42. tree[treeNode][1] = 1;
  43. }
  44. return;
  45. }
  46. int mid = start + (end-start)/2;
  47. if(index <= mid){
  48. updateTree(tree,index,value,start,mid,2*treeNode);
  49. }else{
  50. updateTree(tree,index,value,mid+1,end,2*treeNode+1);
  51. }
  52. tree[treeNode][0] = tree[2*treeNode][0] + tree[2*treeNode+1][0];
  53. tree[treeNode][1] = tree[2*treeNode][1] + tree[2*treeNode+1][1];
  54. return;
  55. }
  56. public static void main(String[] args) {
  57. // Write your code here
  58. Scanner in = new Scanner(System.in);
  59. int n = in.nextInt();
  60. int[] arr = new int[n];
  61. for(int i=0;i<n;i++){
  62. arr[i] = in.nextInt();
  63. }
  64. int[][] tree = new int[4*n][2];
  65. buildTree(arr,tree,0,n-1,1);
  66. int q = in.nextInt();
  67. while(q-->0){
  68. int type = in.nextInt();
  69. if(type==1){
  70. int l = in.nextInt();
  71. int r = in.nextInt();
  72. System.out.println(findCount(tree,l-1,r-1,0,n-1,1,0));
  73. }else if(type==0){
  74. int x = in.nextInt();
  75. int y = in.nextInt();
  76. updateTree(tree,x-1,y,0,n-1,1);
  77. }else{
  78. int l = in.nextInt();
  79. int r = in.nextInt();
  80. System.out.println(findCount(tree,l-1,r-1,0,n-1,1,1));
  81. }
  82. }
  83. }
  84.  
  85. }
Runtime error #stdin #stdout #stderr 0.07s 2184192KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Exception in thread "main" java.util.NoSuchElementException
	at java.util.Scanner.throwFor(Scanner.java:862)
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextInt(Scanner.java:2117)
	at java.util.Scanner.nextInt(Scanner.java:2076)
	at Main.main(Main.java:59)