Cod sursa(job #2669729)

Utilizator maraboneaMara Bonea marabonea Data 7 noiembrie 2020 19:21:21
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
/**
infoarene.ro/problema/stramosi
*/
#include <fstream>
using namespace std;
int n,q;
int vt[250010],log2[250010];
int m[20][250010];
void precalc()
{
    for(int i=2;i<=n;i++)
    {
        log2[i]=log2[i/2]+1;
    }
    for(int j=1;j<=n;j++)
    {
        int k=vt[j];
        m[0][j]=k;
    }
    for(int i=1;(1<<i)<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            m[i][j]=m[i-1][m[i-1][j]];
        }
    }
}
int str(int x,int y)
{
    while(y)
    {
        int p=log2[y];
        x=m[p][x];
        y=y-(1<<p);
    }
    return x;
}
int main()
{
    ifstream fin("stramosi.in");
    ofstream fout("stramosi.out");
    fin>>n>>q;
    for(int i=1; i<=n; i++)
    {
        fin>>vt[i];
    }
    precalc();
    int x,y;
    while( fin>>x>>y)
    {

        fout<<str(x,y)<<" ";
    }
    return 0;
}