Advertisement
willy108

teamscode summer 2022 highways tester solution

Nov 15th, 2022
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. template<int N_>
  5. struct Lst {
  6. int n, t[N_ * 2], z[N_];
  7.  
  8. void bld(int n_) {
  9. n = n_;
  10. }
  11. void pul(int k, int, int) {
  12. int lc = k << 1 | 0, rc = k << 1 | 1;
  13. t[k] = min(t[lc], t[rc]);
  14. }
  15. void put(int k, int l, int r, int x) {
  16. t[k] = x;
  17. if (l != r)
  18. z[k] = x;
  19. }
  20. void pus(int k, int l, int r) {
  21. if (z[k] != 0) {
  22. int m = (l + r) / 2;
  23. put(k << 1 | 0, l, m, z[k]), put(k << 1 | 1, m + 1, r, z[k]);
  24. z[k] = 0;
  25. }
  26. }
  27. void upd(int k, int l, int r, int ql, int qr, int x) {
  28. if (ql <= l && qr >= r)
  29. put(k, l, r, x);
  30. else if (qr >= l && ql <= r) {
  31. int m = (l + r) / 2;
  32. pus(k, l, r);
  33. upd(k << 1 | 0, l, m, ql, qr, x), upd(k << 1 | 1, m + 1, r, ql, qr, x);
  34. pul(k, l, r);
  35. }
  36. }
  37. void upd(int l, int r, int x) {
  38. upd(1, 0, n - 1, l, r, x);
  39. }
  40. int qry(int k, int l, int r, int ql, int qr) {
  41. if (qr < l || ql > r)
  42. return INT_MAX;
  43. else if (ql <= l && qr >= r)
  44. return t[k];
  45. else {
  46. int m = (l + r) / 2;
  47. pus(k, l, r);
  48. return min(qry(k << 1 | 0, l, m, ql, qr), qry(k << 1 | 1, m + 1, r, ql, qr));
  49. }
  50. }
  51. int qry(int l, int r) {
  52. return qry(1, 0, n - 1, l, r);
  53. }
  54. };
  55.  
  56. Lst<1 << 18> st;
  57.  
  58. int main() {
  59. int n, m, k, q;
  60. scanf("%d%d%d%d", &n, &m, &k, &q);
  61. vector<tuple<int, int, int>> rd(k);
  62. for (auto &[y, x1, x2] : rd)
  63. scanf("%d%d%d", &x1, &x2, &y);
  64. vector<tuple<int, int, int, int, int>> qy;
  65. for (int h = 0; h < q; h++) {
  66. int x1, y1, x2, y2;
  67. scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
  68. if (y1 > y2)
  69. swap(y1, y2);
  70. if (x1 > x2)
  71. swap(x1, x2);
  72. qy.push_back({y2, x2, y1, x1, h});
  73. }
  74. sort(rd.begin(), rd.end());
  75. sort(qy.begin(), qy.end());
  76. int i = 0;
  77. st.bld(m + 1);
  78. vector<bool> ans(q);
  79. for (auto [y2, x2, y1, x1, h] : qy) {
  80. while (i < k && get<0>(rd[i]) <= y2) {
  81. st.upd(get<1>(rd[i]), get<2>(rd[i]) - 1, get<0>(rd[i]));
  82. i++;
  83. }
  84. ans[h] = x1 == x2 || st.qry(x1, x2 - 1) >= y1;
  85. }
  86. for (bool x : ans)
  87. printf(x ? "YES\n" : "NO\n");
  88. return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement