Cod sursa(job #3231714)

Utilizator bravo_tiramisutiramisu bravo_tiramisu Data 27 mai 2024 16:42:21
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <iostream>
#include <algorithm>
#include <fstream>

using namespace std;

#define DMAX 250003
int D[19][DMAX], l2[DMAX];

int main () {

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

    int n, m, i, j, x, y;
    fin >> n >> m;

    for (int i = 1; i <= n; ++i) 
    {
        fin >> D[0][i];
        l2[i + 1] = l2[(i + 1) >> 1] + 1;
    }

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

    while (m--) 
    {
        fin >> x >> y;
        while (y) 
        {
            x = D[l2[y]][x];
            y -= 1 << l2[y];
        }
        fout << x << "\n";
    }

    fin.close();
    fout.close();
    return 0;
}