Cod sursa(job #2153620)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 6 martie 2018 12:53:42
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <iostream>
#include <fstream>
using namespace std;
const int NMAX = 250001;
int stram[NMAX][18];
int p2[20];

int main() {
  ifstream in("stramosi.in");
  ofstream ou("stramosi.out");
  int n, m, q, p;
  in >> n >> m;
  p2[0] = 1;
  for(int i = 1; p2[i] <= n; ++i) {
    p2[i] = p2[i - 1] << 1;
  }
  for(int i = 1; i <= n; ++i) {
    in >> stram[i][0];
  }
  for(int i = 1; p2[i] <= n; ++i) {
    for(int j = 1; j <= n; ++j) {
      stram[j][i] = stram[stram[j][i - 1]][i - 1];
    }
  }
  for(int nrq = 0; nrq < m; ++nrq) {
    in >> q >> p;
    for(int pp = 0; p > 0; p >>= 1, ++pp) {
      if(p & 1) {
        q = stram[q][pp];
      }
    }
    ou << q << '\n';
  }
  return 0;
}