fork download
  1. #include<bits/stdc++.h>
  2.  
  3. #define ll long long
  4. #define X first
  5. #define Y second
  6.  
  7. #define vi vector<ll>
  8. #define ii pair<ll,ll>
  9. #define vii vector<ii>
  10.  
  11. const long long MAX = 2e5 + 5;
  12. const long long mod = 1e9 + 7;
  13. const long long INF = 1e9;
  14.  
  15. using namespace std;
  16.  
  17. ll st[MAX << 2];
  18. ll a[MAX];
  19. ll n,q;
  20.  
  21. void buildtree(ll id,ll l,ll r){
  22. if(l == r){
  23. st[id] = a[l];
  24. return;
  25. }
  26. ll m = l + r >> 1;
  27. buildtree(id << 1,l,m);
  28. buildtree(id << 1 | 1,m + 1,r);
  29.  
  30. st[id] = st[id << 1] + st[id << 1 | 1];
  31. }
  32. void update(ll id,ll l,ll r,ll u,ll v){
  33. if(u > r || u < l)return;
  34. if(l == r){
  35. if(u == l)st[id] = v;
  36. return;
  37. }
  38. ll m = l + r >> 1;
  39. update(id << 1,l,m,u,v);
  40. update(id << 1 | 1,m + 1,r,u,v);
  41.  
  42. st[id] = st[id << 1] + st[id << 1 | 1];
  43. }
  44. ll get(ll id,ll l,ll r,ll u,ll v){
  45. if(u > r || v < l)return 0;
  46. if(u <= l && r <= v)return st[id];
  47.  
  48. ll m = l + r >> 1;
  49. return get(id << 1,l,m,u,v) + get(id << 1 | 1,m + 1,r,u,v);
  50. }
  51.  
  52. ll cs ;
  53. ll xort = 0;
  54. ll xort2 = 0;
  55. signed main(){
  56. cin>>n>>q;
  57. cs = n + 1;
  58. for(ll i = 1;i <= n;i++)cin>>a[i];
  59. buildtree(1,1,MAX - 1);
  60.  
  61. for(ll i = 1,c,v;i <= q;i++){
  62. cin>>c>>v;
  63.  
  64. //cout<<i<<":\n";
  65. //cout<<get(1,1,MAX - 1,1,MAX - 1)<<",";
  66. if(c == 1){
  67. a[cs] = v;
  68. update(1,1,MAX - 1,cs++,v);
  69. //for(ll i = 1;i <= cs;i++)cout<<a[i]<<" ";
  70. //cout<<"\n";
  71. }else if(c == 2){
  72. a[v] = 0;
  73. update(1,1,MAX - 1,v,0);
  74. }else
  75. if(c == 3){
  76. //ll sum = 0;
  77. xort = v;
  78. xort2 = v;
  79. for(ll i = 1;i < cs;i++){
  80. //cout<<(a[i]^xort)<<" = ";
  81.  
  82. //sum += a[i] ^ xort;
  83. update(1,1,MAX - 1,i,a[i] ^ xort);
  84. a[i] ^= xort;
  85. }
  86. //cout<<sum<<"\n";
  87. //continue;
  88. }
  89.  
  90. //for(ll i = 1;i < cs;i++)cout<<a[i]<<" ";
  91. //cout<<"\n";
  92. cout<<(get(1,1,MAX - 1,1,MAX - 1))<<"\n";
  93.  
  94. }
  95. }
Success #stdin #stdout 0.01s 7912KB
stdin
6 5
2 3 9 5 6 6
1 3
3 5
2 2
3 2
2 7
stdout
34
37
31
29
25