Cod sursa(job #2121032)

Utilizator vladavladaa vlada Data 3 februarie 2018 11:17:09
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

const int maxn=250005;
const int maxk=20;
int dp[maxk][maxn],n,m,f,l;
int stramos(int p,int q)
{
    for(int bit=0;(1<<bit)<=n;++bit)
    {
        if(p &(1<<bit))
            q=dp[bit][q];
    }
    return q;
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        fin>>dp[0][i];
    //1<<i <= log2(n) <=> 1<=2^i<=n
    for(int i=1;(1<<i)<=n;++i)
        for(int j=1;j<=n;j++)
    {
        dp[i][j]=dp[i-1][dp[i-1][j]];
    }
    for(int i=1;i<=m;i++)
    {
        fin>>f>>l;
        fout<<stramos(l,f)<<'\n';
    }
    return 0;
}