Cod sursa(job #2941222)

Utilizator vladburacBurac Vlad vladburac Data 17 noiembrie 2022 12:32:01
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 250000;

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

int bl[18][NMAX+1];
int main() {
  int n, m, i, x, step, put, node, pas;
  fin >> n >> m;
  for( i = 1; i <= n; i++ )
    fin >> bl[0][i];
  for( put = 1; ( 1 << put ) < n; put++ ) {
    for( i = 1; i <= n; i++ ) {
      if( bl[put-1][i] && bl[put-1][bl[put-1][i]] )
        bl[put][i] = bl[put-1][bl[put-1][i]];
    }
  }
  for( i = 0; i < m; i++ ) {
    fin >> node >> x;
    step = 17;
    pas = 0;
    while( step >= 0 ) {
      if( pas + ( 1 << step ) <= x ) {
        node = bl[step][node];
        pas += ( 1 << step );
      }
      step--;
    }
    fout << node << "\n";
  }
  return 0;
}