Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> pii;
- void mcin() {}
- template<typename T, typename ...Tail>
- void mcin(T &&arg, Tail &&...args) {
- cin >> arg;
- mcin(args...);
- }
- #define in(type, ...) type __VA_ARGS__; mcin(__VA_ARGS__);
- template<typename T1, typename T2>
- istream &operator>>(istream &in, pair<T1, T2> &p) {
- return in >> p.first >> p.second;
- }
- template<typename T>
- istream &operator>>(istream &in, vector<T> &v) {
- for (auto &item: v)
- in >> item;
- return in;
- }
- #define all(c) c.begin(), c.end()
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- in(int, n, x, y)
- vector<pair<int, int>> a(n);
- cin >> a;
- function<ll(int, int)> solve = [&](int l, int r) {
- if (r - l == 1) {
- int len = a[l].second - a[l].first;
- return len >= x && len <= y ? 1ll : 0ll;
- }
- int m = (l + r) / 2;
- ll res = solve(l, m) + solve(m, r);
- vector<int> rl(r - m), rr(r - m);
- rl[0] = a[m].first, rr[0] = a[m].second;
- for (int i = m + 1; i < r; i++) {
- rl[i - m] = max(rl[i - m - 1], a[i].first);
- rr[i - m] = min(rr[i - m - 1], a[i].second);
- }
- int ll = 0, lr = 1e9;
- auto len = [&](int ptr) {
- return max(0, min(lr, rr[ptr]) - max(ll, rl[ptr]));
- };
- int ptr1 = r - m - 1, ptr2 = r - m - 1;
- for (int i = m - 1; i >= l; i--) {
- ll = max(ll, a[i].first);
- lr = min(lr, a[i].second);
- while (ptr1 >= 0 && len(ptr1) <= y) ptr1--;
- while (ptr2 >= 0 && len(ptr2) < x) ptr2--;
- res += ptr2 - ptr1;
- }
- return res;
- };
- cout << solve(0, n) << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement