Cod sursa(job #2707650)

Utilizator LeCapataIustinian Serban LeCapata Data 17 februarie 2021 15:34:18
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#define N 250005
using namespace std;

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

int n, q;
int v[N], lvl[N], u[20][N];

int tata(int nod, int query){

    while(query){
        nod = u[lvl[query]][nod];

        int putere = 1;
        for(int i = 1; i <= lvl[query]; ++i)
            putere *= 2;

        query -= putere;
    }

    return nod;
}

int main()
{
    in>>n>>q;

    for(int i = 1; i <= n; ++i)
        in>>u[0][i];

    lvl[1] = 0;

    for(int i = 2; i <= n; i++)
        lvl[i] = lvl[i / 2] + 1;

    int put = 2;
    for(int p = 1; put <= n; ++p){
        for(int i = 1; i <= n; ++i)
            u[p][i] = u[p - 1][u[p - 1][i]];
        put *= 2;
    }


    while(q--){
        int x, y;
        in>>x>>y;

        out<<tata(x, y)<<'\n';
    }

    in.close();
    out.close();
    return 0;
}