Cod sursa(job #3235450)

Utilizator Zen4415Stefan Zen4415 Data 17 iunie 2024 23:00:24
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

#define NMAX 250005
#define LMAX 21

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

int n, m;

int up[NMAX][LMAX];
int t[NMAX];

int main()
{
    fin >> n >> m;
    for (int i=1; i<=n; i++)
    {
        int x;
        fin >> x;
        t[i] = x;
    }

    for (int i=1; i<=n; i++)
        up[i][0] = t[i];

    for(int j=1; j<=20; j++)
        for(int i=1; i<=n; i++)
            up[i][j] = up[up[i][j-1]][j-1];

    for (int i=1; i<=m; i++)
    {
        int q, p;
        fin >> p >> q;
        int pow2 = 0;
        while (q)
        {
            if((1<<pow2) & q) ///daca 2^pow2 se gaseste in descompunerea binara a lui q
            {
                p = up[p][pow2];
                q -= (1<<pow2);
            }
            pow2++;
        }
        fout << p << '\n';
    }
    return 0;
}