Cod sursa(job #2085071)

Utilizator vladcoroian2001Vlad Coroian vladcoroian2001 Data 9 decembrie 2017 17:44:06
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <stdio.h>
using namespace std;
const int nmax=250005;
int n,m,p[nmax],dp[nmax][20],a,b;
int query(int i,int nivel)
{
    if(nivel>n)
        return 0;
    if(nivel==0)
        return i;
    int k=0;
    while((1<<(k+1))<=nivel)
        k++;
    return query(dp[i][k],nivel-(1<<k));

}
int main()
{
    FILE *fi,*fo;
    fi=fopen("stramosi.in","r");
    fo=fopen("stramosi.out","w");
    fscanf(fi,"%d %d",&n,&m);
    for(int i=1;i<=n;i++)
        fscanf(fi,"%d",&p[i]);
    for(int i=1;i<=n;i++)
        dp[i][0]=p[i];

    for(int j=1;(1<<j)<=n;j++)
        for(int i=1;i<=n;i++)
            dp[i][j]=dp[dp[i][j-1]][j-1];

    for(int i=1;i<=m;i++)
    {
        fscanf(fi,"%d %d",&a,&b);
        fprintf(fo,"%d\n",query(a,b));
    }
    fclose(fi);
    fclose(fo);
    return 0;
}