Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct E {
- int p, d;
- E(int p, int d) : p(p), d(d) {}
- };
- struct ST {
- vector<int> t;
- int n;
- ST(int sz) {
- n = 1;
- while (n < sz) n <<= 1;
- t.resize(2 * n, 0);
- }
- void u(int k, int v) {
- k += n;
- t[k] = v;
- for (k >>= 1; k >= 1; k >>= 1) {
- t[k] = max(t[2 * k], t[2 * k + 1]);
- }
- }
- int q(int a, int b) {
- a += n;
- b += n;
- int r = 0;
- while (a <= b) {
- if (a % 2 == 1) r = max(r, t[a++]);
- if (b % 2 == 0) r = max(r, t[b--]);
- a >>= 1;
- b >>= 1;
- }
- return r;
- }
- };
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- int n, m;
- cin >> n >> m;
- vector<vector<int>> a(n, vector<int>(2));
- for (int i = 0; i < n; ++i) {
- cin >> a[i][0] >> a[i][1];
- }
- vector<vector<int>> b(m, vector<int>(2));
- for (int i = 0; i < m; ++i) {
- cin >> b[i][0] >> b[i][1];
- }
- vector<E> c;
- for (size_t i = 0; i < a.size(); ++i) {
- int s = a[i][0], e = a[i][1];
- c.push_back(E(s, 1));
- c.push_back(E(e + 1, -1));
- }
- sort(c.begin(), c.end(), [](const E &x, const E &y) {
- if (x.p != y.p) return x.p < y.p;
- return x.d < y.d;
- });
- vector<int> p(n + 2, 0);
- int cur = 0, prev = -1, mx = 0;
- for (size_t i = 0; i < c.size(); ++i) {
- if (prev != -1 && c[i].p > prev) {
- int len = c[i].p - prev;
- if (cur >= 0 && cur <= n) {
- p[cur] += len;
- if (cur > mx) mx = cur;
- }
- }
- cur += c[i].d;
- prev = c[i].p;
- }
- ST st(mx + 1);
- for (int i = 0; i <= mx; ++i) {
- st.u(i, p[i]);
- }
- vector<int> r;
- for (size_t i = 0; i < b.size(); ++i) {
- int l = b[i][0], h = b[i][1], q = min(h, mx);
- if (l > q) {
- r.push_back(0);
- } else {
- r.push_back(st.q(l, q));
- }
- }
- for (int x : r) {
- cout << x << " ";
- }
- cout << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement