Submission #1158887

#TimeUsernameProblemLanguageResultExecution timeMemory
1158887vladiliusRailway Trip (JOI17_railway_trip)C++20
0 / 100
484 ms59404 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n, k, q; cin>>n>>k>>q;
    vector<int> a(n + 1), d[k + 1];
    for (int i = 1; i <= n; i++){
        cin>>a[i];
        d[a[i]].pb(i);
    }
    
    vector<int> g[n + 1];
    set<int> st;
    for (int i = k; i > 0; i--){
        for (int j: d[i]) st.insert(j);
        for (int j: d[i]){
            auto it = st.find(j);
            if (it != prev(st.end())){
                auto it1 = next(it);
                g[j].pb(*it1);
                g[*it1].pb(j);
            }
            if (it != st.begin()){
                auto it1 = prev(it);
                g[j].pb(*it1);
                g[*it1].pb(j);
            }
        }
    }
    
    mt19937 rng((int) time(0));
    vector<vector<int>> dist(n + 1, vector<int>(100, 1e9));
    queue<int> Q;
    for (int tt = 0; tt < 100; tt++){
        int x = rng() % n + 1;
        dist[x][tt] = 0; Q.push(x);
        while (!Q.empty()){
            int v = Q.front(); Q.pop();
            for (int u: g[v]){
                if (dist[u][tt] == 1e9){
                    dist[u][tt] = dist[v][tt] + 1;
                    Q.push(u);
                }
            }
        }
    }

    while (q--){
        int x, y; cin>>x>>y;
        int out = 1e9;
        for (int i = 0; i < 100; i++){
            out = min(out, dist[x][i] + dist[y][i]);
        }
        out--;
        cout<<out<<"\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...