Pagini recente » Cod sursa (job #1801590) | Cod sursa (job #2647198) | Cod sursa (job #50671) | Cod sursa (job #1141349) | Cod sursa (job #1653870)
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#define maxN 250000 + 5
using namespace std;
int S[30][maxN];
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[x][t];
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[0][i];
int lim = log(n);
for (int i = 1; i <= lim; ++i)
for (int j = 1; j <= n; ++j)
S[i][j] = S[i-1][S[i-1][j]];
for (int k = 0; k < m; ++k){
int x, y;
f >> x >> y;
g << vezi(x, y) << "\n";
}
f.close();
g.close();
return 0;
}