Cod sursa(job #1197737)

Utilizator andreeadeacAndreea Ioana Deac andreeadeac Data 13 iunie 2014 16:38:22
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include<vector>
using namespace std;

ifstream in("stramosi.in");
ofstream out("stramosi.out");

const int N=250001;
int t[19][N];
int n,m;


/*
t[i][j] = al 2^i lea stramos al lui j
t[i][j] = t[i-1][t[i-1][j]]
t[0][j] = tatal lui j

query:

i = 0;
while(p!=0)
{
    if(p%2==1)
        q = t[i][q];
    i++;
    p /= 2;
}

Exemplu: al 21-lea stramos = al 0-lea, al celui de-al 2-lea al celui de-al 4-lea stramos

*/
int main()
{
    int x,i,j,p,q;
    in>>n>>m;
    for(i=1;i<=n;i++){
        in>>t[0][i];;
    }
    for(i=1;1<<i <=n;i++)
        for(j=1;j<=n;j++)
            t[i][j]=t[i-1][t[i-1][j]];
    for(j=1;j<=m;j++){
        in>>q>>p;
        i = 0;
        while(p!=0)
        {
            if(p%2==1)
                q = t[i][q];
            i++;
            p /= 2;
        }
        out<<q<<"\n";
    }
    return 0;
}