Cod sursa(job #2903386)

Utilizator 4N70N1U5Antonio Nitoi 4N70N1U5 Data 17 mai 2022 15:47:26
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>

using namespace std;

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

int N, M, V[250001][20];
 
void preprocess()
{
    for (int j = 1; (1 << j) <= N; j++)
        for (int i = 1; i <= N; i++)
            V[i][j] = V[V[i][j - 1]][j - 1];
}
 
int query(int x, int y)
{
    int p = 0;

    while (y >= 1)
    {
        if ((y & 1) == 1)
        {
            x = V[x][p];
        }

        p++;
        
        y = y >> 1;
    }

    return x;
}

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

    for (int i = 1; i <= N; i++)
    {
        fin >> V[i][0];
    }

    preprocess();

    // for (int j = 0; (1 << j) <= N; j++)
    // {
    //     for (int i = 1; i <= N; i++)
    //     {
    //         cout << V[i][j] << ' ';
    //     }
    //     cout << '\n';
    // }

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

        fin >> Q >> P;

        fout << query(Q, P) << '\n';
    }
}