Cod sursa(job #1042387)

Utilizator jul123Iulia Duta jul123 Data 26 noiembrie 2013 22:50:27
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<iostream>
#include<cstdio>
#include<vector>

using namespace std;

vector<int>t[350000];
int v[350000], m, n;
int log2(int x)
{
    int aux=1, nr=0;
    while(aux<=x)
    {
        aux = aux<<1;
        nr++;
    }
    return nr-1;
}
int main()
{
    FILE *fin, *fout;
    fin=fopen("stramosi.in","r");
    fout=fopen("stramosi.out","w");

    int i, j, aux,lg, x, y;
    fscanf(fin, "%d %d", &n, &m);
    for(i=1; i<=n; i++)
        fscanf(fin, "%d", &v[i]);
    for(i=1; i<=n; i++)
        t[i].push_back(v[i]);
    j=1;
    lg=log2(n);
    for(j=1; j<=n; j++)
        t[0].push_back(0);
    j=1;
    while(j<=lg)
    {
    for(i=1; i<=n; i++)
        t[i].push_back(t[t[i][j-1]][j-1]);
    j++;
    }
    for(i=1; i<=m; i++)
    {
     fscanf(fin, "%d %d", &x, &y);
     j=17;
     while(y!=0)
     {for(; j>=0 && (1<<j) > y; j--);
        x=t[x][j];
        y-=(1<<j);
     }
        fprintf(fout, "%d\n", x);
     }

}