Cod sursa(job #2715597)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 3 martie 2021 21:31:34
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("stramosi.in");
ofstream cout("stramosi.out");

const int NMAX = 250000;
const int MMAX = 300000;

int N, M;
vector <int> g[NMAX + 5];
vector <pair<int,int>> queries[NMAX + 5];

int ans[MMAX + 5];
vector <int> stk;

void dfs(int node) {
    stk.push_back(node);

    for(pair <int, int> qr : queries[node]) {
        if((int)stk.size() > qr.first) {
            ans[qr.second] = stk.end()[-qr.first - 1];
        } else {
            ans[qr.second] = 0;
        }
    }

    for(int it : g[node]) {
        dfs(it);
    }

    stk.pop_back();
}

int main() {
    cin >> N >> M;

    for(int i = 1; i <= N; i++) {
        int x;
        cin >> x;
        g[x].push_back(i);
    }

    for(int i = 1; i <= M; i++) {
        int Q, P;
        cin >> Q >> P;

        queries[Q].push_back({P, i});
    }

    dfs(0);

    for(int i = 1; i <= M; i++) {
        cout << ans[i] << '\n';
    }

    return 0;
}