Cod sursa(job #3306316)

Utilizator razvanmrt_06Mariuta Razvan razvanmrt_06 Data 9 august 2025 16:13:37
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <vector>

using namespace std;

const int Nmax = 250005;
const int Mmax = 300005;

int n, m, sol[Mmax];

vector<int> L[Nmax], path;
vector<pair<int, int>> queries[Nmax];
// q[nod] = {ce stramos caut, numarul intrebarii}

void dfs(int nod){
    path.push_back(nod);

    for(auto qry : queries[nod]){
        int index = path.size() - qry.first - 1;
        if(index >= 0){
            sol[qry.second] = path[index];
        }
    }

    for(int fiu : L[nod]){
        dfs(fiu);
    }

    path.pop_back();
}

int main()
{
    ifstream fin("stramosi.in");
    ofstream fout("stramosi.out");
    fin >> n >> m;
    for(int i = 1; i <= n; i++){
        int tata;
        fin >> tata;
        L[tata].push_back(i);
    }

    for(int i = 1; i <= m; i++){
        int P, Q;       // P = ce stramos caut && Q = nod
        fin >> Q >> P;
        queries[Q].push_back({P, i});
    }

    dfs(0);

    for(int i = 1; i <= m; i++){
        fout << sol[i] << "\n";
    }

    return 0;
}