Cod sursa(job #2212696)

Utilizator lucametehauDart Monkey lucametehau Data 14 iunie 2018 16:32:04
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <fstream>

using namespace std;

ifstream cin ("stramosi.in");
ofstream cout ("stramosi.out");

const int LMAX = 18;
const int NMAX = 250000;

int n, q;
int x, y;

int dp[1 + LMAX][1 + NMAX];

int main() {
  cin >> n >> q;
  for(int i = 1; i <= n; i++)
    cin >> dp[0][i];
  for(int i = 1; i <= LMAX; i++) {
    for(int j = 1; j <= n; j++)
      dp[i][j] = dp[i - 1][dp[i - 1][j]];
  }
  for(int i = 1; i <= q; i++) {
    cin >> x >> y;
    int p = LMAX;
    while(y) {
      if(y & (1 << p)) {
        x = dp[p][x];
        y -= (1 << p);
      }
      p--;
    }
    cout << x << "\n";
  }
  return 0;
}