제출 #1186231

#제출 시각아이디문제언어결과실행 시간메모리
1186231qwushaEvent Hopping (BOI22_events)C++20
0 / 100
292 ms22700 KiB
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define int long long
typedef long long ll;
typedef long double ld;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
int inf = 1e15;


signed main() {
    int n, q;
    cin >> n >> q;
    vector<pair<int, int>> evinit(n);
    set<int> comst;
    map<int, int> nval, inival;
    for (int i = 0; i < n; i++) {
        cin >> evinit[i].fi >> evinit[i].se;
        comst.insert(evinit[i].fi);
        comst.insert(evinit[i].se);
    }
    int cur = 0;
    for (auto el : comst) {
        nval[el] = cur;
        inival[cur] = el;
        cur++;
    }
    vector<pair<int, int>> eve(n);
    for (int i = 0; i < n; i++) {
        eve[i].fi = nval[evinit[i].fi];
        eve[i].se = nval[evinit[i].se];
    }
    sort(eve.begin(), eve.end());
    vector<int> ending(cur);
    for (int i = 0; i < n - 1; i++) {
        if (eve[i].se < eve[i + 1].fi) {
            ending[eve[i].se] = 1;
        }
    }
    vector<int> pr(cur + 1);
    for (int i = 0; i < cur; i++) {
        pr[i + 1] = ending[i] + pr[i];
    }
    for (int qw = 0; qw < q; qw++) {
        int s, e;
        cin >> s >> e;
        s--;
        e--;
        if (s > e) {
            cout << "impossible" << '\n';
        } else if (pr[eve[e].se] - pr[eve[s].fi] == 0) {
            cout << e - s << '\n';
        } else {
            cout << "impossible" << '\n';
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...