Cod sursa(job #1662323)

Utilizator EberardoVladianu Cosmin Eberardo Data 24 martie 2016 17:46:49
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>

using namespace std;

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

/*struct intrebare
{
    int stramos,numar;
}intrebari[250005];
*/
int n,m,t[250005];
int a[19][250005];


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

void citire()
{
    int i;

    fin>>n>>m;

    for(i=1; i<=n; i++)
    {
        fin>>a[0][i];
    }

}

int raspuns(int nod, int nr)
{
    int i=1;
    int putere=0; //putere a lui 2
    int numar=nr/2;
    if(nr==0)
        return nod;
    while(i<=numar)
       {
        i<<=1;
        putere++;
       }
    return raspuns(a[putere][nod],nr-i);
}

void rezolvare()
{
    int i,p,q,mos;
    for(i=1; i<=m; i++)
    {
        fin>>q>>p;
        mos=raspuns(q,p);
        fout<<mos<<'\n';

    }
}


int main()
{
    citire();
    preprocesare();
    rezolvare();
    return 0;
}