Pagini recente » Cod sursa (job #2269165) | Cod sursa (job #618753) | Cod sursa (job #1673815) | Cod sursa (job #2731682) | Cod sursa (job #2755144)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, m, M[21][25001], lg[25001];
void logaritm(){
lg[1]=0;
for (int i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1; //precalcul pt logaritmi
for(int i = 1; (1 << i) <= n; i++)
for(int j = 1; j <= n; j++)
M[i][j] = M[i - 1][M[i - 1][j]];
}
int query(int poz, int rang){
int stramos = poz; // stramosul de rang 0
while(rang){
int i = lg[rang]; //mergem pe puteri ale lui 2 cat de mult putem
int pow2 = 1 << i;
stramos = M[i][stramos];
rang -= pow2;
}
return stramos;
}
int main()
{
int x, y;
fin>>n>>m;
for(int i = 1; i <= n; i++)
fin>>M[0][i];
logaritm();
for(int i = 1; i <= m; i++){
fin>>x>>y;
fout<<query(x, y)<<"\n";
}
return 0;
}