fork download
  1. //In the name of God
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. struct node
  8. {
  9. node *l,*r;
  10. int st,en;
  11. int val;
  12. bool revch;
  13. node(int x,int y)
  14. {
  15. st=x;
  16. en=y;
  17. }
  18. void change(int begin,int end)
  19. {
  20. begin=max(begin,st);
  21. end=min(end,en);
  22. if(begin>end) return;
  23. if(begin==st and end==en)
  24. {
  25. revch=1-revch;
  26. val=(en-st+1)-val;
  27. }
  28. else if(st!=en)
  29. {
  30. if(l==NULL)
  31. l=new node(st,(st+en)/2);
  32. l->change(begin,end);
  33. if(r==NULL)
  34. r=new node((st+en)/2+1,en);
  35. r->change(begin,end);
  36. val=l->val+r->val;
  37. if(revch)
  38. val=(en-st+1)-val;
  39. }
  40. }
  41. int query(int begin,int end)
  42. {
  43. begin=max(begin,st);
  44. end=min(end,en);
  45. if(begin>end) return 0;
  46. if(begin==st and end==en)
  47. return val;
  48. else if(st!=en)
  49. {
  50. int sum=0;
  51. if(l!=NULL)
  52. sum+=l->query(begin,end);
  53. if(r!=NULL)
  54. sum+=r->query(begin,end);
  55. if(revch)
  56. sum=(end-begin+1)-sum;
  57. return sum;
  58. }
  59. return 0;
  60. }
  61. };
  62.  
  63. int main()
  64. {
  65. vector<node *> st(20);
  66. for(int i=0;i<st.size();++i)
  67. st[i]=new node(0,1e5+10);
  68. int n;
  69. cin>>n;
  70. for(int i=1;i<=n;++i)
  71. {
  72. int a; cin>>a;
  73. for(int j=0;a!=0;j++)
  74. {
  75. if(a%2)
  76. st[j]->change(i,i);
  77. a/=2;
  78. }
  79. }
  80. int m;
  81. cin>>m;
  82. while(m--)
  83. {
  84. int t,sst,en,xo;
  85. cin>>t>>sst>>en;
  86. if(t==1)
  87. {
  88. //sum
  89. int ans=0;
  90. for(int j=0;j<st.size();++j)
  91. {
  92. int c=st[j]->query(sst,en);
  93. c<<=j;
  94. ans+=c;
  95. }
  96. cout<<fixed<<ans<<endl;
  97. }
  98. else
  99. {
  100. cin>>xo;
  101. for(int j=0;xo!=0;j++)
  102. {
  103. if(xo%2)
  104. st[j]->change(sst,en);
  105. xo/=2;
  106. }
  107. }
  108. }
  109. return 0;
  110. }
Success #stdin #stdout 0.01s 2820KB
stdin
5
4 10 3 13 7
8
1 2 4
2 1 3 3
1 2 4
1 3 3
2 2 5 5
1 1 5
2 1 2 10
1 2 3
stdout
26
22
0
34
11