#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector<pair<int, int>> v(n);
    vector<int> x(1, 0);
    for (auto &i : v) {
        cin >> i.first >> i.second;
        x.push_back(i.first);
        x.push_back(i.first + 1);
        x.push_back(i.second);
    }
    sort(x.begin(), x.end());
    x.resize(unique(x.begin(), x.end()) - x.begin());
    for (auto &i : v) {
        i.first = lower_bound(x.begin(), x.end(), i.first) - x.begin();
        i.second = lower_bound(x.begin(), x.end(), i.second) - x.begin();
    }
    vector<int> prv(x.size());
    vector<int> nxt(x.size());
    for (int i = 0; i < x.size(); i++) {
        prv[i] = i - 1;
        nxt[i] = i + 1;
    }
    nxt[x.size() - 1] = -1;
    for (auto &i : v) {
        if (nxt[i.first] != -1) {
            prv[nxt[i.first]] = prv[i.first];
        }
        if (prv[i.first] != -1) {
            nxt[prv[i.first]] = nxt[i.first];
        }
        prv[i.first] = prv[i.second];
        nxt[i.first] = i.second;
        prv[i.second] = i.first;
        if (prv[i.first] != -1) {
            nxt[prv[i.first]] = i.first;
        }
    }
    vector<pair<int, int>> curv;
    vector<int> ind(x.size());
    x.push_back(1e9 + 52);
    int su = 0;
    for (int i = 0; i != -1; i = nxt[i]) {
        su += x[i + 1] - x[i];
        ind[i] = curv.size();
        curv.push_back({su, i});
    }
    int q;
    cin >> q;
    while (q--) {
        char t;
        int curx;
        cin >> t >> curx;
        if (t == 'L') {
            //curx--;
            int ind1 = upper_bound(curv.begin(), curv.end(), make_pair(curx, (int)1e9)) - curv.begin();
            int p = 0;
            if (ind1 > 0) p = curv[ind1 - 1].first;
            cout << x[curv[ind1].second] + (curx - p) << "\n";
        } else {
            int ind1 = prev(upper_bound(x.begin(), x.end(), curx)) - x.begin();
            int ind2 = ind[ind1];
            int p = 0;
            if (ind2 > 0) p += curv[ind2 - 1].first;
            cout << p + (curx - x[ind1]) << "\n";
        }
    }
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |