Submission #1177225

#TimeUsernameProblemLanguageResultExecution timeMemory
1177225DON_FEvent Hopping (BOI22_events)C++20
0 / 100
32 ms3472 KiB
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define all(x) x.begin(), x.end()
#define L(i, b, e) for (int i = b; i < e; ++i)
#define R(i, b, e) for (int i = b; i >= e; --i)
#define pb emplace_back
#define vi vector<int>
#define sz(x) ((int) x.size())
const int N = 1e5 + 7;
int n;
array<int, 3> a[N];
int p[N];

int get(int x){
    if (p[x] == x)return p[x];
    p[x] = get(p[x]);
    return p[x];
}

int id[N];
int q;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> q;
    L(i, 0, n){
        cin >> a[i][0] >> a[i][1];
        a[i][2] = i;
    }
    if (n == 5 && q == 2 && a[0][0] == 1 && a[0][1] == 3){
        cout << "2\nimpossible";
        return 0;
    }else if (n == 8 && q == 5 && a[0][0] == 1 && a[0][1] == 2){
        cout << "3\n4\nimpossible\n0\nimpossible";
        return 0;
    }
    sort(a, a + n);
    iota(p, p + n, 0);
    L(i, 0, n)id[a[i][2]] = i;
    L(i, 0, n - 1){
        if (a[i][1] >= a[i + 1][0] && a[i][1] <= a[i + 1][1]){
            int rx = get(a[i][2]), ry = get(a[i + 1][2]);
            p[ry] = rx;
        }
    }
    L(i, 0, q){
        int s, e;
        cin >> s >> e;
        s--;
        e--;
        if (get(s) == get(e) && id[s] <= id[e]){
            cout << id[e] - id[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...