Advertisement
SAURAVKR

Network Coverage

Jan 25th, 2025
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct E {
  5.     int p, d;
  6.     E(int p, int d) : p(p), d(d) {}
  7. };
  8.  
  9. struct ST {
  10.     vector<int> t;
  11.     int n;
  12.  
  13.     ST(int sz) {
  14.         n = 1;
  15.         while (n < sz) n <<= 1;
  16.         t.resize(2 * n, 0);
  17.     }
  18.  
  19.     void u(int k, int v) {
  20.         k += n;
  21.         t[k] = v;
  22.         for (k >>= 1; k >= 1; k >>= 1) {
  23.             t[k] = max(t[2 * k], t[2 * k + 1]);
  24.         }
  25.     }
  26.  
  27.     int q(int a, int b) {
  28.         a += n;
  29.         b += n;
  30.         int r = 0;
  31.         while (a <= b) {
  32.             if (a % 2 == 1) r = max(r, t[a++]);
  33.             if (b % 2 == 0) r = max(r, t[b--]);
  34.             a >>= 1;
  35.             b >>= 1;
  36.         }
  37.         return r;
  38.     }
  39. };
  40.  
  41. int main() {
  42.     ios_base::sync_with_stdio(false);
  43.     cin.tie(NULL);
  44.  
  45.     int n, m;
  46.     cin >> n >> m;
  47.  
  48.     vector<vector<int>> a(n, vector<int>(2));
  49.     for (int i = 0; i < n; ++i) {
  50.         cin >> a[i][0] >> a[i][1];
  51.     }
  52.  
  53.     vector<vector<int>> b(m, vector<int>(2));
  54.     for (int i = 0; i < m; ++i) {
  55.         cin >> b[i][0] >> b[i][1];
  56.     }
  57.  
  58.     vector<E> c;
  59.     for (size_t i = 0; i < a.size(); ++i) {
  60.         int s = a[i][0], e = a[i][1];
  61.         c.push_back(E(s, 1));
  62.         c.push_back(E(e + 1, -1));
  63.     }
  64.  
  65.     sort(c.begin(), c.end(), [](const E &x, const E &y) {
  66.         if (x.p != y.p) return x.p < y.p;
  67.         return x.d < y.d;
  68.     });
  69.  
  70.     vector<int> p(n + 2, 0);
  71.     int cur = 0, prev = -1, mx = 0;
  72.  
  73.     for (size_t i = 0; i < c.size(); ++i) {
  74.         if (prev != -1 && c[i].p > prev) {
  75.             int len = c[i].p - prev;
  76.             if (cur >= 0 && cur <= n) {
  77.                 p[cur] += len;
  78.                 if (cur > mx) mx = cur;
  79.             }
  80.         }
  81.         cur += c[i].d;
  82.         prev = c[i].p;
  83.     }
  84.  
  85.     ST st(mx + 1);
  86.     for (int i = 0; i <= mx; ++i) {
  87.         st.u(i, p[i]);
  88.     }
  89.  
  90.     vector<int> r;
  91.  
  92.     for (size_t i = 0; i < b.size(); ++i) {
  93.         int l = b[i][0], h = b[i][1], q = min(h, mx);
  94.         if (l > q) {
  95.             r.push_back(0);
  96.         } else {
  97.             r.push_back(st.q(l, q));
  98.         }
  99.     }
  100.  
  101.     for (int x : r) {
  102.         cout << x << " ";
  103.     }
  104.     cout << "\n";
  105.  
  106.     return 0;
  107. }
  108.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement