Cod sursa(job #1744833)

Utilizator Vlad_317Vlad Panait Vlad_317 Data 20 august 2016 16:16:49
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdio.h>

using namespace std;

const int LOG_MAX = 18;
const int N_MAX = 250000;

int a[LOG_MAX + 1][N_MAX + 1];

int main()
{
    FILE *fin, *fout;

    fin = fopen("stramosi.in", "r");
    fout = fopen("stramosi.out", "w");

    int n, m;

    fscanf(fin, "%d%d", &n, &m);

    for(int i = 1; i <= n; i++)
    {
        fscanf(fin, "%d", &a[0][i]);
    }

    for(int i = 1; i <= LOG_MAX; i++)
        for(int j = 1; j <= n; j++)
            a[i][j] = a[i - 1][a[i - 1][j]];

    for(int i = 1; i <= m; i++)
    {
        int nod, nivel;
        fscanf(fin, "%d%d", &nod, &nivel);
        int s = nod, p = LOG_MAX;
        while(p >= 0)
        {
            if(1 << p <= nivel)
            {
                s = a[p][s];
                nivel -= 1 << p;
            }
            p--;
        }
        fprintf(fout, "%d\n", s);
    }

    return 0;
}