Cod sursa(job #1328637)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 28 ianuarie 2015 16:56:40
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <iostream>
#include <fstream>
#define nmax 250005

using namespace std;

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

int n, m, nod, p;
int s[20][nmax], Exp[nmax];

int find(int p, int nod) {
    if (p > n) return 0;
    if (p == 0) return nod;
    int i = Exp[p];
    return find(p - (1<<i), s[i][nod]);
}

int main() {
    
    fin >> n >> m;
    
    for (int i = 1; i <= n; i++)
        fin >> s[0][i];
    
    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]];
    
    for (int i = 2; i <= n; i++)
        Exp[i] = Exp[i/2] + 1;
    
    for (int i = 1; i<= m; i++) {
        fin >> nod >> p;
        fout << find(p, nod) << "\n";
    }
    
    fin.close();
    fout.close();
    
    return 0;
}