Cod sursa(job #3231815)

Utilizator rapidu36Victor Manz rapidu36 Data 27 mai 2024 20:04:50
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>

using namespace std;

const int N = 25e4;
const int L = 17;

int s[L+1][N+1], n;

void constructie_s()
{
    for (int i = 1; (1 << i) <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            s[i][j] = s[i-1][s[i-1][j]];
        }
    }
}

int interogare(int x, int nrs)
{
    int i = 0;
    while ((1 << i) <= nrs)
    {
        if (nrs & (1 << i))///daca bitul i al lui nrs este 1
        {
            x = s[i][x];
        }
        i++;
    }
    return x;
}

int main()
{
    ifstream in("stramosi.in");
    ofstream out("stramosi.out");
    int q;
    in >> n >> q;
    for (int j = 1; j <= n; j++)
    {
        in >> s[0][j];
    }
    constructie_s();
    for (int i = 0; i < q; i++)
    {
        int x, nrs;
        in >> x >> nrs;
        out << interogare(x, nrs) << "\n";
    }
    in.close();
    out.close();
    return 0;
}