Cod sursa(job #1569444)

Utilizator mister_adyAdrian Catana mister_ady Data 15 ianuarie 2016 16:10:15
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<fstream>
#include<cmath>
#include<iostream>
using namespace std;

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

const int N = 250010;

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

int stramosi(int nod, int pasi) {

  while (pasi > pasRad) {
    nod = vRad[nod];
    pasi = pasi - pasRad;
  }

  while ( pasi ) {
    nod = v[nod];
    pasi--;
  }
  
  return nod;
}

int main() {

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

  pasRad = sqrt(n);

  for (int j = 1 ; j <= n ; j++) {
    for (int i = 1 ; i <= pasRad ; i++) {
      vRad[j] = v[vRad[j]];
    }
  }
  
  for (int i = 1 ; i <= m ; i++) {
    int nod, pasi;
    f>>nod>>pasi;
    g<<stramosi(nod,pasi)<<'\n';      
  }
  
  f.close();
  g.close();
  return 0;  
}