记录编号 186564 评测结果 AAAAAAAAAA
题目名称 zwei 最终得分 100
用户昵称 Gravatardevil 是否通过 通过
代码语言 C++ 运行时间 0.587 s
提交时间 2015-09-13 15:37:55 内存使用 1.46 MiB
显示代码纯文本
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <cstring>
  6. #include <cmath>
  7. #include <map>
  8. #include <stack>
  9. #include <queue>
  10. #include <ctime>
  11. #include <algorithm>
  12. using namespace std;
  13. typedef long long ll;
  14. typedef long double ld;
  15. typedef unsigned int uint;
  16. const int inf=1061109567;
  17. const int maxn=100010;
  18. const int maxm=21;
  19. const int mod=10007;
  20.  
  21. int tree[3*maxn];
  22.  
  23. void build_tree(int l,int r,int dir)
  24. {
  25. if(l==r)
  26. {
  27. scanf("%d",&tree[dir]);
  28. return;
  29. }
  30. int m=(l+r)/2;
  31. build_tree(l,m,dir*2);
  32. build_tree(m+1,r,dir*2+1);
  33. tree[dir]=tree[dir*2]^tree[dir*2+1];
  34. }
  35.  
  36. void modify(int x,int y,int l,int r,int dir)
  37. {
  38. if(l==r&&l==x)
  39. {
  40. tree[dir]=y;
  41. return;
  42. }
  43. int m=(l+r)/2;
  44. if(x<=m) modify(x,y,l,m,dir*2);
  45. else modify(x,y,m+1,r,dir*2+1);
  46. tree[dir]=tree[dir*2]^tree[dir*2+1];
  47. }
  48.  
  49. int query(int ql,int qr,int l,int r,int dir)
  50. {
  51. if(ql<=l&&qr>=r) return tree[dir];
  52. if(ql>r||qr<l) return 0;
  53. int m=(l+r)/2;
  54. int t1=query(ql,qr,l,m,dir*2);
  55. int t2=query(ql,qr,m+1,r,dir*2+1);
  56. return t1^t2;
  57. }
  58.  
  59. int main()
  60. {
  61. freopen("zwei.in","r",stdin);
  62. freopen("zwei.out","w",stdout);
  63. //clock_t st=clock();
  64. int n,m;scanf("%d%d",&n,&m);
  65. build_tree(1,n,1);
  66. int a,x,y;
  67. int ans;
  68. while(m--)
  69. {
  70. scanf("%d%d%d",&a,&x,&y);
  71. if(a==0)
  72. {
  73. modify(x,y,1,n,1);
  74. }
  75. else
  76. {
  77. ans=query(x,y,1,n,1);
  78. printf("%d\n",ans);
  79. }
  80. }
  81. //clock_t ed=clock();
  82. //printf("\nTime used : %.7lf Ms\n",double(ed-st)/CLOCKS_PER_SEC);
  83. return 0;
  84. }