Cod sursa(job #1357194)

Utilizator emanuel_rRamneantu Emanuel emanuel_r Data 23 februarie 2015 20:11:03
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
#include<cmath>
#include<iostream>

using namespace std;

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

int a[20][250005];
int n,m;

int Pow(int n,int p)
{
    int sol=1;
    while(p){
        if(p%2)
            sol=sol*n;
        n=n*n;
        p=p/2;
    }
    return sol;
}

int Log(int x)
{
    x=log2(x);
    return x;
}

void citire()
{
    int i;
    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>a[0][i];
}

void aranjare()
{
    int i,j;
    for(i=1;i<=Log(n);i++)
        for(j=1;j<=n;j++)
            a[i][j]=a[i-1][a[i-1][j]];
}

void rez(int p,int q)
{
    int red,ance=q;
    while(p && ance){
        red=Log(p);
        ance=a[red][ance];
        p-=Pow(2,red);
    }
    g<<ance<<"\n";
}

int main()
{
    int i,p,q;
    citire();
    aranjare();
    for(i=0;i<m;i++){
        f>>q>>p;
        rez(p,q);
    }
    return 0;
}