Cod sursa(job #2695403)

Utilizator mihaipriboimihailucapriboi mihaipriboi Data 12 ianuarie 2021 21:00:09
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
// Mihai Priboi

#include <bits/stdc++.h>

#define MAXN 250000
#define MAXPOW 17

int stramosi[MAXPOW + 1][MAXN + 1];

int main() {
  FILE *fin, *fout;
  int n, m, i, pow, q, p;
  fin = fopen( "stramosi.in", "r" );
  fout = fopen( "stramosi.out", "w" );

  fscanf( fin, "%d%d", &n, &m );
  for( i = 1; i <= n; i++ )
    fscanf( fin, "%d", &stramosi[0][i] );

  // cream matrice cu stramosi la distante puteri ale lui 2
  for( pow = 1; pow <= MAXPOW; pow++ )
    for( i = 1; i <= n; i++ )
      stramosi[pow][i] = stramosi[pow - 1][stramosi[pow - 1][i]];

  for( i = 0; i < m; i++ ) {
    fscanf( fin, "%d %d", &q, &p );
    for( pow = MAXPOW; pow >= 0; pow-- ) {
      if( p >= 1 << pow ) {
        q = stramosi[pow][q];
        p -= 1 << pow;
      }
    }
    fprintf( fout, "%d\n", q );
  }

  fclose( fin );
  fclose( fout );
  return 0;
}