Cod sursa(job #2511691)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 19 decembrie 2019 16:48:41
Problema Stramosi Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>
using namespace std;
const int NMAX = 250000;
int t[NMAX + 5] , d[18][NMAX + 5] , n;
void dinamica()
{
    int i , j;
    for(j = 1 ; j <= n ; j ++)
        d[0][j] = t[j];
    for(i = 1 ; (1 << i) <= n ; i ++)
        for(j = 1 ; j + (1 << i) - 1 <= n ; j ++)
            d[i][j] = d[i - 1][d[i - 1][j]];
}
int query(int x , int y)
{
    int j;
    j = 0;
    for( ; y ; y = (y >> 1))
    {
        if(y & 1)
            x = d[j][x];
        j ++;
    }
    return x;
}
int main()
{
    freopen("stramosi.in" , "r" , stdin);
    freopen("stramosi.out" , "w" , stdout);
    int q , i , x , y;
    scanf("%d%d" , &n , &q);
    for(i = 1 ; i <= n ; i ++)
        scanf("%d" , &t[i]);
    dinamica();
    for(i = 1 ; i <= q ; ++ i)
    {
        scanf("%d%d" , &x , &y);
        printf("%d\n" , query(x , y));
    }
    return 0;
}