Cod sursa(job #2641495)

Utilizator euyoTukanul euyo Data 11 august 2020 17:29:23
Problema Stramosi Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>
#include <cmath>

using namespace std;

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

const int MaxN = 250002;
const int MaxLog = 20;

int anc[MaxN][MaxLog]; //anc[i][p] = indicele stramosului 2^p al lui i

int main() {
  int n, q;

  fin >> n >> q;
  for ( int i = 1; i <= n; ++i ) {
	fin >> anc[i][0];
  }
  for ( int p = 1; p <= MaxLog - 1; ++p ) {
    for	( int i = 1; i <= n; ++i ) {
      anc[i][p] = anc[anc[i][p - 1]][p - 1];
	}
  }
  while ( q-- ) {
	int p, i;
	fin >> i >> p;
    int lg = (int)log2( p );
    int b = anc[i][lg];
	lg = p - (1 << lg);
	while ( lg ) {
	  --lg;
	  b = anc[b][0];
	}
	fout << b << "\n";
  }
  fin.close();
  fout.close();
  return 0;
}