Cod sursa(job #1840349)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 4 ianuarie 2017 12:26:26
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>

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

int dp[100][250001];

int main()
{
    int n, m, i, q, p, put, pi, j;
    fin >> n >> m;
    for (i = 1; i<=n; ++i)
        fin >> dp[0][i];
    for (i = 1; i<= 25; ++i)
        for (j = 1; j<=n; ++j)
            dp[i][j] = dp[i-1][dp[i-1][j]];
    for(i=0;i<m;++i)
    {
        fin >> q >> p;
        put=0;
        pi=1;
        while(pi<<1 <=p)
            ++put, pi<<=1;
        if(put > 24)
            fout << "0\n";
        else
        {
            for(j=put;j>=0 and q; --j)
            {
                if(1<<j <= p)
                {
                    q = dp[j][q];
                    p-=(1<<j);
                }
            }
            fout << q << endl;
        }
    }
    return 0;
}