fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long
  5. #define scan_int(n) scanf("%d",&n)
  6. #define scan_ll(n) scanf("%lld",&n)
  7. #define m_p make_pair
  8. #define p_b push_back
  9. #define mx 100000
  10. #define modu 1000000007
  11.  
  12. int seg[10000000];
  13. int a[1000000];
  14. int lazy[10000000];
  15.  
  16. void build(int left,int right ,int idx){
  17. if(left==right){
  18. seg[idx] = a[left];
  19. return;
  20. }
  21. int mid = left+(right-left)/2;
  22. build(left,mid,idx*2);
  23. build(mid+1,right,idx*2+1);
  24. seg[idx] = seg[idx*2]+seg[2*idx+1];
  25. }
  26.  
  27. void update(int left,int right,int ql,int qr,int idx){
  28. if(lazy[idx]){
  29. //seg[idx] += lazy[idx]; <--- why commented this line,When it is used ?
  30. if(lazy[idx]%2!=0){
  31. seg[idx] = right-left+1-seg[idx];
  32. }
  33. if(left!=right){
  34. lazy[idx*2] += lazy[idx];
  35. lazy[idx*2+1] += lazy[idx];
  36. }
  37. lazy[idx] = 0;
  38. }
  39. if(ql>right||qr<left)
  40. return ;
  41. if(left>=ql&&right<=qr){
  42. seg[idx] = right-left+1-seg[idx];
  43. if(left!=right){
  44. lazy[idx*2]++;
  45. lazy[idx*2+1]++;
  46. }
  47. return;
  48. }
  49. int mid = left+(right-left)/2;
  50. update(left,mid,ql,qr,idx*2);
  51. update(mid+1,right,ql,qr,idx*2+1);
  52. seg[idx] = seg[idx*2]+seg[idx*2+1];
  53. }
  54.  
  55. int query(int left,int right,int ql,int qr,int idx){
  56. if(lazy[idx]){
  57. if(lazy[idx]%2!=0){
  58. seg[idx] = right-left+1-seg[idx]; <----
  59. }
  60. if(left!=right){
  61. lazy[idx*2] += lazy[idx];
  62. lazy[idx*2+1] += lazy[idx];
  63. }
  64. lazy[idx] = 0;
  65. }
  66. if(ql>right||qr<left)
  67. return 0;
  68. if(ql<=left&&right<=qr){
  69. return seg[idx];
  70. }
  71. int mid = left+(right-left)/2;
  72. return query(left,mid,ql,qr,idx*2)+query(mid+1,right,ql,qr,idx*2+1);
  73. }
  74. int main()
  75. {
  76. int n,q,i;
  77. scan_int(n);
  78. scan_int(q);
  79. for(i=0;i<n;i++){
  80. a[i] = 0;
  81. }
  82. int task,l,r;
  83. memset(lazy,0,sizeof(lazy));
  84. while(q--){
  85. scan_int(task);
  86. scan_int(l);
  87. scan_int(r);
  88. if(task){
  89. printf("%d\n",query(0,n-1,l,r,1));
  90. }
  91. else{
  92. update(0,n-1,l,r,1);
  93. }
  94. }
  95. return 0;
  96. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function 'int query(int, int, int, int, int)':
prog.cpp:58:47: error: expected primary-expression before '<' token
    seg[idx] = right-left+1-seg[idx];          <----
                                               ^
prog.cpp:59:3: error: expected primary-expression before '}' token
   }
   ^
stdout
Standard output is empty