Cod sursa(job #1649437)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 11 martie 2016 13:39:23
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <bitset>
#include <stack>
#define nmax 250010
using namespace std;

int n,m1,np;
int pater[nmax][20];

int finds(int k,int nod)
{
    if(nod==0) return 0;
    int i;
    if(k==1) return pater[nod][0];
    for(i=0;(1<<i)<=k;i++); i--;
    if( (1<<i) == k ) return pater[nod][i];
    return finds( k-(1<<i),pater[nod][i] );

}

int main()
{
    int nod,i,j,who,nr;
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    scanf("%d%d",&n,&m1);
    for(i=1;i<=n;i++)
        scanf("%d",&pater[i][0]);
    for(i=1;(1<<i)<=n;i++)
        for(j=1;j<=n;j++)
            pater[j][i]=pater [ pater[j][i-1] ] [ i-1 ];

    for(;m1;m1--)
    {
        scanf("%d%d",&who,&nr);
        printf("%d\n",finds(nr,who));
    }

    fclose(stdin);
    fclose(stdout);
    return 0;
}