Cod sursa(job #2188174)

Utilizator tanasaradutanasaradu tanasaradu Data 26 martie 2018 23:16:48
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;

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

const int PMAX = 19;
const int NMAX = 250005;

int n , Q , dp[PMAX][NMAX];


/// d[i][j]=stramosul lui j aflat la distanta 2^i

int main()
{
    int p , q , expo;
    fin >> n >> Q;
    for(int i = 1 ; i <= n ; i++)
        fin >> dp[0][i];
    for(int i = 1 ; i <= PMAX - 1 ; i++)
        for(int j = 1 ; j <= n ; j++)
            dp[i][j] = dp[i - 1][dp[i - 1][j]];
    while(Q -- )
    {
        fin >> q >> p;
        expo = 0;
        while(p)
        {
            if(p & 1)
                q = dp[expo][q];
            expo++;
            p /= 2;
        }
        fout << q << "\n";
    }
    fin.close();
    fout.close();
    return 0;
}