Cod sursa(job #601649)

Utilizator vlad2901Vlad Berindei vlad2901 Data 7 iulie 2011 12:20:13
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>
#include <math.h>
#define MAX 250001
#define LOGMAX 17

int a[MAX][LOGMAX];


int main()
{
    int n, m, p, q, aux, coef, str, i, j, rang;

    FILE *fin = freopen("stramosi.in", "r", stdin);
    FILE *fout = freopen("stramosi.out", "w", stdout);

    scanf("%d %d", &n, &m);

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

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

    for(i=0;i<m;i++)
    {
        scanf("%d %d", &q, &p);

        aux = p;
        str = q;

        while(aux)
        {
            coef = aux ^ (aux & (aux-1));
            rang = (int)log2(coef);
            str = a[str][rang];
            aux = aux & (aux-1);
        }
        printf("%d\n", str);

    }

    return 0;
}