Cod sursa(job #2754734)

Utilizator rimihaiMihai Radu-Ioan rimihai Data 26 mai 2021 13:59:52
Problema Stramosi Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

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


int mat_stramos[18][250003]; ///pastram stramosul de ordin 2^i al lui j


int stramos(int al_catelea_stramos, int pozitie)
{

    int aux=pozitie; ///pastram pozitia
    while(al_catelea_stramos)
    {
        int ct=0;
        int put=1;
        while(put*2<=al_catelea_stramos) ///cea mai mare putere a lui 2 mai mica decat numarul stramosului (pentru a cauta in vector)
        {
            ct++;
            put*=2;
        }
        aux=mat_stramos[ct][aux]; ///actualizam valoarea
        al_catelea_stramos=al_catelea_stramos-put; ///actualizam numarul stramosului ce trebuie cautat
    }
    int stramos_gasit=aux;
    return stramos_gasit;

}

int main()
{
    int n,m,p,q;
    fin>>n>>m;

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

    for(int i=1, put2=2; put2<=n; i++, put2*=2) ///generare matrice de stramosi
        for(int j=1; j<=n; j++)
            mat_stramos[i][j]=mat_stramos[i-1][mat_stramos[i-1][j]];

    for(int i=1; i<=m; i++)
    {
        fin>>q>>p;
        fout<<stramos(p,q)<<endl;
    }

    return 0;
}