Pagini recente » Cod sursa (job #1816394) | Cod sursa (job #143761) | Cod sursa (job #3229490) | Cod sursa (job #475916) | Cod sursa (job #1653851)
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#define maxN 250000 + 5
using namespace std;
int S[maxN][30];
int log(int n){
int a = 0, b = 1;
while ((b << 1) <= n){
a++;
b <<= 1;
}
return a;
}
int vezi(int q, int p){
int nr, t;
nr = p;
t = q;
while (nr != 0){
int x = log(nr);
t = S[t][x];
nr -= (1 << x);
}
return t;
}
int main()
{
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n, m;
f >> n >> m;
for (int i = 1; i <= n; ++i)
f >> S[i][0];
int lim = log(n);
for (int j = 1; j <= lim; ++j)
for (int i = 1; i <= n; ++i)
S[i][j] = S[S[i][j - 1]][j - 1];
for (int k = 0; k < m; ++k){
int x, y;
f >> x >> y;
g << vezi(x, y) << "\n";
}
f.close();
g.close();
return 0;
}