Cod sursa(job #1498016)

Utilizator CollermanAndrei Amariei Collerman Data 7 octombrie 2015 21:22:45
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>
using namespace std;
ofstream fout("stramosi.out");
ifstream fin("stramosi.in");

const int NMAX = 250005;

int n, m, x, y;
int ST[19][NMAX];

int afla(int q, int p)
{
    for(int i = 20; i > -1; --i)
        if(p & (1 << i))
            q = ST[i][q];
    return q;
}

int main()
{
    fin >> n >> m;
    for(int i=1; i<=n; ++i)
        fin >> ST[0][i];

    int l = 0, p = 1;
    while (p <= n) {
        p *= 2;
        ++l;
    }
    --l;

    for(int j=1; j<=l; ++j)
        for(int i=1; i<=n; ++i)
            ST[j][i] = ST[j-1][ST[j-1][i]];
    for(int i=1; i<=m; ++i) {
        fin >> x >> y;
        fout << afla(x, y) << '\n';
    }
    return 0;
}