Cod sursa(job #2777774)

Utilizator cyg_dawidDavid Ghiberdic cyg_dawid Data 24 septembrie 2021 12:25:58
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <cmath>

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

int const nmax = 250000;
int const pmax = 19;
int stramosi[pmax][nmax];
int n, m;

void build_stramosi () {
    int plim = log2(n);
    for (int p = 1; p <= plim; p++)
        for (int i = 1; i <= n; i++)
            stramosi[p][i] = stramosi[p - 1][stramosi[p - 1][i]];
}

int main () {
    fin >> n >> m;
    for (int i = 1; i <= n; i++)
        fin >> stramosi[0][i];
    build_stramosi();
    for (int i = m; i; i--) {
        int q, p;
        fin >> q >> p; // stramosi [p][q]
        int plim = log2(n); int val = (1 << plim);
        for (; val; val >>= 1, plim--) {
            if (val <= p) {
                q = stramosi[plim][q];
                p -= val;
            }
        }
        fout << q << "\n";
    }
}