Cod sursa(job #2755168)

Utilizator cosminradu1760Cosmin-Andrei Radu cosminradu1760 Data 26 mai 2021 20:36:23
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m, M[21][250001], lg[250001];


void logaritm(){

    lg[1]=0;
	for (int i = 2; i <= n; i++)
		lg[i] = lg[i / 2] + 1;          //precalcul pt logaritmi

    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 query(int poz, int rang){

    int stramos = poz;         //  stramosul de rang 0

    while(rang > 0){

        int i = lg[rang];     //mergem pe puteri ale lui 2 cat de mult putem
        int pow2 = 1 << i;

        stramos = M[i][stramos];
        rang -= pow2;

    }

    return stramos;

}


int main()
{
    int x, y;
    fin>>n>>m;

    for(int i = 1; i <= n; i++)
        fin>>M[0][i];

    logaritm();

    for(int i = 1; i <= m; i++){
        fin>>x>>y;
        fout<<query(x, y)<<"\n";
    }

    return 0;
}