Cod sursa(job #165519)

Utilizator marian.butucelButucel Marian marian.butucel Data 26 martie 2008 11:07:07
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#define nmax 250005   
#define logmax 19   
  
int M, N, logN;   
  
int S[logmax][nmax];   
  
int main()   
{   
    int i, k, p, a, log;   
  
    freopen("stramosi.in", "r", stdin);   
    freopen("stramosi.out", "w", stdout);   
  
    scanf("%d%d", &N, &M);   
  
    for (i = 1; i <= N; ++i)   
        scanf("%d", &S[0][i]);   
  
    for (logN = 0; (1<<logN) <= N; ++logN);   
  
    for (k = 1; k <= logN; ++k)   
        for (i = 1; i <= N; ++i)   
            if (S[k-1][S[k-1][i]])   
                S[k][i] = S[k-1][S[k-1][i]];   
  
    while (M--)   
    {   
        scanf("%d%d", &i, &k);   
  
        for (p = 0, a = i; p < k && a; k-= (1<<log))   
        {   
            for (log = 0; (1<<log) <= k; ++log);   
            if ((1<<log) > k) --log;   
            a = S[log][a];   
        }   
        printf("%d\n", a);   
    }   
  
    return 0;   
}