Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define LINT long long int
- #define ULINT unsigned long long int
- using namespace std;
- class Type{
- public:
- set<pair<pair<LINT, LINT>, LINT>> s;
- pair<LINT, LINT> p;
- };
- int main() {
- int n, m;
- cin >> n;
- vector<pair<LINT, LINT>> vc(n);
- for (auto& x : vc) {
- cin >> x.first >> x.second;
- }
- vector<Type> res(n);
- res[n - 1].p = vc[n - 1];
- res[n - 1].s.insert({vc[n - 1], n - 1});
- for (int i = n - 2; i >= 0; --i) {
- res[i].s = res[i + 1].s;
- auto it = res[i].s.lower_bound({{vc[i].second, -1}, -1});
- if (it == res[i].s.begin()) {
- if (it != res[i].s.end()) {
- if ((*it).first.first == vc[i].second) {
- LINT t = (*it).first.second;
- res[i].s.erase(it);
- res[i].s.insert({{vc[i].first, t}, i});
- res[i].p = {vc[i].first, t};
- continue;
- }
- } else
- continue;
- } else
- it--;
- auto mn = it;
- if (!((*it).first.first <= vc[i].second && (*it).first.second >= vc[i].second)) {
- res[i].s.insert({vc[i], i});
- res[i].p = vc[i];
- } else {
- it--;
- while ((*it).first.first <= vc[i].second && (*it).first.second >= vc[i].second) {
- if ((*it).second < (*mn).second)
- mn = it;
- if (it != res[i].s.begin())
- it--;
- else
- break;
- }
- LINT t = (*mn).first.second;
- res[i].s.erase(mn);
- res[i].p = {vc[i].first, t};
- res[i].s.insert({{vc[i].first, t}, i});
- }
- }
- cin >> m;
- LINT tmp1, tmp2;
- for (int i = 0; i < m; ++i) {
- cin >> tmp1 >> tmp2;
- tmp2--;
- if (res[tmp2].p.first <= tmp1 && tmp1 <= res[tmp2].p.second)
- cout << res[tmp2].p.second - tmp1 << endl;
- else {
- bool f = false;
- auto it = res[i].s.upper_bound({{vc[i].second, -1}, -1});
- it--;
- auto mn = it;
- while ((*it).first.first <= tmp1 && (*it).first.second >= tmp1) {
- f = true;
- if ((*it).second < (*mn).second)
- mn = it;
- if (it != res[i].s.begin())
- it--;
- else
- break;
- }
- if (f)
- cout << (*mn).first.second - tmp1 << endl;
- else
- cout << 0 << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement