Pagini recente » Cod sursa (job #2439700) | Cod sursa (job #3258534) | Cod sursa (job #509172) | Cod sursa (job #37235) | Cod sursa (job #1197737)
#include <fstream>
#include<vector>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
const int N=250001;
int t[19][N];
int n,m;
/*
t[i][j] = al 2^i lea stramos al lui j
t[i][j] = t[i-1][t[i-1][j]]
t[0][j] = tatal lui j
query:
i = 0;
while(p!=0)
{
if(p%2==1)
q = t[i][q];
i++;
p /= 2;
}
Exemplu: al 21-lea stramos = al 0-lea, al celui de-al 2-lea al celui de-al 4-lea stramos
*/
int main()
{
int x,i,j,p,q;
in>>n>>m;
for(i=1;i<=n;i++){
in>>t[0][i];;
}
for(i=1;1<<i <=n;i++)
for(j=1;j<=n;j++)
t[i][j]=t[i-1][t[i-1][j]];
for(j=1;j<=m;j++){
in>>q>>p;
i = 0;
while(p!=0)
{
if(p%2==1)
q = t[i][q];
i++;
p /= 2;
}
out<<q<<"\n";
}
return 0;
}