Cod sursa(job #3169252)

Utilizator Allie28Radu Alesia Allie28 Data 14 noiembrie 2023 15:42:13
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>

using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

const int LMAX = 250005;
int father[LMAX], str[LMAX][20];


int main() {
    int n, m, i,j;
    fin >> n >> m;
    for (i = 1; i <= n; i++) {
        fin>>father[i];
        str[i][0] = father[i];
    }
    for (j = 1; j < 20; j++) {
        for (i = 1; i <= n; i++) {
            //stramosul i de ord j este stramosul de ord j-1 al stramosului i de ord j-1
            str[i][j] = str[str[i][j-1]][j-1];
        }
    }
    while (m--) {
        int q, p;
        fin >> q >> p;
        for (j = 19; j >= 0 && p; j--) {
            if ((1<<j) <= p) { ///daca face parte din descomp lui p
                q = str[q][j]; ///mergi la stramosul 2^j a lui q
                p = p - (1<<j);
            }
        }
        fout<<q<<endl;
    }




    fin.close();
    fout.close();

    return 0;
}