Cod sursa(job #2754129)

Utilizator dascalu_maraDascalu Mara Elena dascalu_mara Data 25 mai 2021 10:41:30
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
//
//  main.cpp
//  Stramosi
//
//  Created by Mara Dascalu on 21/05/2021.
//

#include <iostream>
#include <fstream>
 
using namespace std;

ifstream input("stramosi.in");
ofstream output("stramosi.out");
 
const int n_max = 250000;
int n, m, ordin, nod, stramosi[19][n_max+1];

void aflaStramosi()
{
    int range = 2;
    for (int i = 1; range <= n; i++)
    {
        range *= 2;
//        cout<<i<<" "<<range<<" "<<n<<"\n";
        for (int j = 1; j <= n; j++)
            stramosi[i][j] = stramosi[i-1][stramosi[i-1][j]];
    }
}

int gasesteStramosi (int nod, int ordin)
{
    int putere, idx, temp;
    temp = nod;
    while (ordin){
        putere = 1; idx = 0;
        while (putere*2 <= ordin)
        {
            putere *= 2;
            idx++;
        }
        
        temp = stramosi[idx][temp];
        ordin -= putere;
    }
    
    return temp;
}

int main(){
    input>>n>>m;
    for (int i = 1; i <= n; i++)
        input>>stramosi[0][i];
    aflaStramosi();
    for (int i = 1; i <= m; i++)
    {
        input>>nod>>ordin;
        output<<gasesteStramosi(nod, ordin)<<"\n";
    }
}