Cod sursa(job #634619)

Utilizator sebii_cSebastian Claici sebii_c Data 16 noiembrie 2011 19:52:17
Problema Stramosi Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h>

#define NMAX 250005
#define LgMax 19 

int A[20][NMAX];
int N;
char buffer[(1<<21)];

void computeA()
{
    int i, j;
    for (i = 1; i <= LgMax; ++i)
	for (j = 1; j <= N; ++j)
	    A[i][j] = A[i-1][A[i-1][j]];
}

int find(int x, int k)
{
    int i;
    for (i = 0; i<=LgMax; ++i)
	if ((k >> i) & 1)
	    x = A[i][x];
    return x;
}
    
int main()
{
    freopen("stramosi.in", "r", stdin);
    freopen("stramosi.out", "w", stdout);

    int M, i, x, k, res, id = 0;
    scanf("%d %d\n", &N, &M);
    fgets(buffer, (1<<21), stdin);
    for (i=1; i<=N; ) {
	res = 0;
	for (; buffer[id] >= '0' && buffer[id] <= '9'; ++id)
	    res = res*10 + buffer[id] - '0';
	A[0][i++] = res;
	++id;
    }
    
    computeA();
    for ( ; M>0; --M) {
	scanf("%d %d", &x, &k);
	printf("%d\n", find(x, k));
    }
 
    return 0;
}