Cod sursa(job #3195820)

Utilizator altcinava3322Cineva altcinava3322 Data 21 ianuarie 2024 19:57:18
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <vector>
#include <iomanip>
#include <fstream>
using namespace std;
ifstream cin ("stramosi.in");
ofstream cout ("stramosi.out");

using VI = vector<int>;

const int Dim = 250001;

int n, m;
VI G[Dim];

VI E, Skip;
int skipCnt;
int Pos[Dim];

void DF(int x, int boss) {
    if(!Pos[x]) Pos[x] = E.size();
    E.push_back(x);
    Skip.push_back(skipCnt);
    for(int y : G[x]) {
        if(y == boss) continue;
        DF(y, x);
        ++skipCnt;
    }
}
int Kth(int p, int k) {
    if(!k) return E[p];
    if(p-k < 0) return 0;

    return Kth(p-k, Skip[p]-Skip[p-k]);
}

int main(){
    cin >> n >> m;
    int x, k;
    for(int i = 1; i <= n; ++i) {
        cin >> x;
        G[x].push_back(i);
    }
    DF(0, 0);
    /*for(int q : E) cout << setw(2) << q << ' ';
    cout << '\n';
    for(int q : Skip) cout << setw(2) << q << ' ';*/
    for(int i = 0; i < m; ++i) {
        cin >> x >> k;
        cout << Kth(Pos[x], k) << '\n';
    }
    return 0;
}