Cod sursa(job #1673132)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 3 aprilie 2016 14:49:34
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("stramosi.in");
ofstream out("stramosi.out");
const int NMAX = 250001;
int sp[NMAX][20];
int n,m;
int lg[NMAX];

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

void sparse_table()
{
    for(int i=2;i<=n;i++)
        lg[i] = lg[i/2] + 1;
    for(int j=1;(1<<j)<=n;j++)
        for(int i=1;i<=n;i++)
            sp[i][j] = sp[sp[i][j-1]][j-1];
}

int main()
{
    citire();
    sparse_table();
    int x,y,k;
    for(int i=1;i<=m;i++)
    {
        in>>x>>y;
        while(y)
        {
            k = lg[y];
            x = sp[x][k];
            y = y-(1<<k);
        }
        out<<x<<"\n";
    }
    in.close();
    out.close();
    return 0;
}