Cod sursa(job #3152126)

Utilizator vlad_dimuVlad Dimulescu vlad_dimu Data 23 septembrie 2023 23:55:30
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>
#define MAXN 250000
#define MAXM 300000
#define LOGMAX 19
using namespace std;

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

int bl[LOGMAX][MAXN + 1];

int v[MAXN];

int p2[LOGMAX];
int lg2[MAXM + 1];

int main(){
  int n, m, i, k, poz, moves, bit;
  fin >> n >> m;
  for( i = 1; i <= n; i++ )
    fin >> v[i], bl[0][i] = v[i];

  p2[0] = 1;
  for( i = 1; i < LOGMAX; i++ )
    p2[i] = 2 * p2[i - 1];

  lg2[1] = 0;
  for( i = 2; i <= MAXM; i++ )
    lg2[i] = lg2[i / 2] + 1;

  for( k = 1; k <= lg2[m]; k++ ){
    for( i = 1; i <= n; i++ ){
      bl[k][i] = bl[k - 1][ bl[k - 1][i] ];
    }
  }

  for( i = 0; i < m; i++ ){
    fin >> poz >> moves;
    for( bit = 1; bit <= moves; bit *= 2 ){
      if( bit & moves )
        poz = bl[ lg2[bit] ][poz];
    }
    fout << poz << '\n';
  }
}