Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define topper top //XDDDDDDD
  6.  
  7. #define mp make_pair
  8. #define pb push_back
  9. #define db(x) cerr << #x << " == " << x << endl;
  10. #define _ << " " <<
  11.  
  12. typedef long long ll;
  13. typedef vector<int> vi;
  14. typedef pair<int,int> ii;
  15.  
  16. const long double EPS = 1e-9;
  17. const int N=1e5+5;
  18. const int MOD=1e9+7;
  19. const int INF=0x3f3f3f3f;
  20.  
  21. int st[4*N], lz[4*N];
  22. int n, m;
  23.  
  24. void build(int p, int l, int r) {
  25. if (l == r) { st[p] = 0; return; }
  26. build(2*p, l, (l+r)/2);
  27. build(2*p+1, (l+r)/2+1, r);
  28. st[p] = st[2*p] + st[2*p+1];
  29. }
  30.  
  31. void push(int p, int l, int r) {
  32. if (lz[p]) {
  33. st[p] = r-l+1-st[p];
  34. if(l!=r) lz[2*p] = lz[2*p+1] = lz[p];
  35. lz[p] = 0;
  36. }
  37. }
  38.  
  39. int query(int p, int l, int r, int i, int j) {
  40. if (r < i or l > j) return 0;
  41. push(p, l, r);
  42. if (l >= i and r <= j) return st[p];
  43. return query(2*p, l, (l+r)/2, i, j) +
  44. query(2*p+1, (l+r)/2+1, r, i, j);
  45. }
  46.  
  47. void update(int p, int l, int r, int i, int j) {
  48. if (r < i or l > j) return;
  49. push(p, l, r);
  50. if (l >= i and r <= j) { lz[p] ^= 1 ; push(p, l, r); return; }
  51. update(2*p, l, (l+r)/2, i, j);
  52. update(2*p+1, (l+r)/2+1, r, i, j);
  53. st[p] = st[2*p] + st[2*p+1];
  54. }
  55.  
  56. int main(){
  57. scanf("%d %d", &n, &m);
  58. build(1, 1, n);
  59. for(int i=0; i<m; i++) {
  60. int t, l, r;
  61. scanf("%d %d %d", &t, &l, &r);
  62. if(!t) update(1, 1, n, l, r);
  63. else printf("%d\n", query(1, 1, n, l, r));
  64. }
  65.  
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement