Cod sursa(job #1956813)

Utilizator nicu_serteSerte Nicu nicu_serte Data 7 aprilie 2017 01:46:26
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
#define nmax 250005
int t[35][nmax], n, m, log_2[nmax];
void citire()
{
    int k;
    fin>>n>>m;
    for(k=1; k<=n; k++)
        fin>>t[0][k];
}
void preprocesare()
{
    int i, j;
    for(i=2; i<nmax; i++)
        log_2[i]=1+log_2[i>>1];
    for(j=1; j<=log_2[n]; j++)
        for(i=1; i<=n; i++)
            t[j][i]=t[j-1][t[j-1][i]];
}
void query(int p, int q)
{
    int k;
    k=log_2[p];
    while(p!=0)
    {
        q=t[k][q];
        p=p-(1<<k);
        k=log_2[p];
    }
    fout<<q<<'\n';
}
int main()
{
    int p, q;
    citire();
    preprocesare();
    while(m)
    {
        m--;
        fin>>q>>p;
        query(p, q);
    }
    return 0;
}