Cod sursa(job #2511677)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 19 decembrie 2019 16:28:38
Problema Stramosi Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
const int NMAX = 250000;
int t[NMAX + 5] , d[NMAX + 5][25] , n;
void dinamica()
{
    int i , j;
    for(i = 1 ; i <= n ; i ++)
        d[i][0] = i;
    for(j = 1 ; (1 << j) <= n ; j ++)
        for(i = 1 ; i <= n ; i ++)
            d[i][j] = d[t[d[i][j - 1]]][j - 1];
}
int query(int x , int y)
{
    int j;
    j = 0;
    for( ; y ; y = (y >> 1))
    {
        if(y & 1)
            x = t[d[x][j]];
        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;
}