Cod sursa(job #1902613)

Utilizator delia_ioanaCeapa Delia Ioana delia_ioana Data 4 martie 2017 18:15:43
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
#include <iostream>
#include <vector>
#include <climits>
#include <math.h>

using namespace std;  

int main() {
    
    freopen("stramosi.in", "r", stdin);
    freopen("stramosi.out", "w", stdout);

    int n, m, a;
    scanf("%d %d", &n, &m);

    vector<vector<int> > ancestors(18, vector<int>(250010));

    for (int i = 1; i <= n; i ++) {
      scanf("%d", &ancestors[0][i]);
    }

    for (int i = 1; i <= n; i ++) {
      for (int j = 1; (1 << j) <= n; j ++) {
        ancestors[j][i] = ancestors[j - 1][ancestors[j - 1][i]];
      }
    } 

    for (int i = 0; i < m; i ++) {
      int node, steps;
      scanf("%d %d", &node, &steps);     
      
      for (int j = 0; (1 << j) <= n; j ++) {
        if (steps & (1 << j)) {
          steps -= (1 << j);
          node = ancestors[j][node];
        }
      }

      printf("%d\n", node);
    }

    return 0;
}