Submission #1352611

#TimeUsernameProblemLanguageResultExecution timeMemory
1352611vahagngEvent Hopping (BOI22_events)C++20
0 / 100
128 ms10420 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;

int n, q, s[N], e[N];

// long long dist[N][N];

vector<int> adj[N];
bool visited[N];

int comp[N], id[N], up[N][18];

map<long long, long long> mp;

int main() {
    cin >> n >> q;
    vector<pair<pair<int, int>, int>> v;
    for (int i = 1; i <= n; i++) {
        cin >> s[i] >> e[i];
        v.push_back({{s[i], e[i]}, i});
    }
    sort(v.begin(), v.end(), [&](pair<pair<int,int>, int> A, pair<pair<int,int>, int> B){
        auto [l1, r1] = A.first;
        auto [l2, r2] = B.first;
        if(l1 == l2){
            return r1 < r2;
        }
        return l1 < l2;
    });
    for(int i = 1; i <= n + 1; i++){
        for(int j = 0; j < 18; j++){
            up[i][j] = n + 1;
        }
    }
    for(int i = 1; i < n; i++){
        auto [l1, r1] = v[i - 1].first;
        auto [l2, r2] = v[i].first;
        if(l2 <= r1 && r1 <= r2){
            up[v[i - 1].second][0] = v[i].second;
        }
    }
    for(int j = 1; j < 18; j++){
        for(int i = 1; i <= n; i++){
            up[i][j] = up[up[i][j - 1]][j - 1];
        }
    }
    while (q--) {
        int u, v;
        cin >> u >> v;
        int ans = 0;
        for(int i = 17; i >= 0; i--){
            if(up[u][i] <= v){
                u = up[u][i];
                ans += (1 << i);
            }
        }
        if(u != v){
            cout << "impossible\n";
        }else{
            cout << ans << endl;
        }
    }
}
#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...