Cod sursa(job #1888216)

Utilizator claudiuarseneClaudiu Arsene claudiuarsene Data 21 februarie 2017 23:10:37
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<fstream>
#include<cmath>
#include<iostream>
using namespace std;

ifstream f("stramosi.in");
ofstream g("stramosi.out");

const int N = 250010;
const int logN = 20;

int n, m, t, v[N], vRad[logN][N], pasRad;

int stramosi(int nod, int pasi) {

  int k = t;
  while (k >= 0) {
    if (pasi >= (1<<k)) {
      pasi = pasi - (1<<k);
      nod = vRad[k][nod];
    }
    k--;
  }

  return nod;
}

int main() {

  f>>n>>m;
  for (int i = 1 ; i <= n ; i++) {
    f>>v[i];
    vRad[0][i] = v[i];
  }

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

  for (int i = 1 ; i <= m ; i++) {
    int nod, pasi;
    f>>nod>>pasi;
    g<<stramosi(nod,pasi)<<'\n';
  }

  f.close();
  g.close();
  return 0;
}