Rentib

Tetris 2D

Mar 27th, 2020
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int tree[1 << 22], M = 1, w;
  4. bool lazy[1 << 22];
  5. void propagacja(int v){
  6. lazy[v] = 0;
  7. lazy[v * 2] = lazy[v * 2 + 1] = 1;
  8. tree[v * 2] = tree[v * 2 + 1] = tree[v];
  9. }
  10. void maks(int a, int b, int v = 1, int p = 1, int k = M){
  11. if(p > b || k < a) return;
  12. if(lazy[v]) propagacja(v);
  13. if(p >= a && k <= b){
  14. w = max(w, tree[v]);
  15. return;
  16. }
  17. maks(a, b, v * 2, p, (p + k) / 2);
  18. maks(a, b, v * 2 + 1, (p + k) / 2 + 1, k);
  19. }
  20. void ustaw(int a, int b, int v = 1, int p = 1, int k = M){
  21. if(p > b || k < a) return;
  22. if(lazy[v]) propagacja(v);
  23. if(p >= a && k <= b){
  24. lazy[v] = 1;
  25. tree[v] = w + 1;
  26. return;
  27. }
  28. ustaw(a, b, v * 2, p, (p + k) / 2);
  29. ustaw(a, b, v * 2 + 1, (p + k) / 2 + 1, k);
  30. tree[v] = max(tree[v * 2], tree[v * 2 + 1]);
  31. }
  32. int main(){
  33. ios_base::sync_with_stdio(0);
  34. cin.tie(0);
  35. int d, n;
  36. cin >> d >> n;
  37. while(M <= d) M *= 2;
  38. for(int i = 0, l, x;i < n;i++, w = 0){
  39. cin >> l >> x;
  40. maks(x + 1, l + x);
  41. ustaw(x + 1, l + x);
  42. }
  43. cout << tree[1];
  44. }
Advertisement
Add Comment
Please, Sign In to add comment