Pagini recente » Cod sursa (job #792533) | Cod sursa (job #1576478) | Cod sursa (job #484106) | Cod sursa (job #963337) | Cod sursa (job #1757312)
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <limits>
#include <stack>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,m;
int a[30][250001];
int solve(int x,int y,int k)
{
int curent,times=0;
times=1<<k;
if(times==y)
return a[k][x];
x=a[k][x];
while(times<y && x!=0)
{
x=a[0][x];
times++;
}
return x;
}
int main()
{
int x;
f >> n >> m;
for(int i=1;i<=n;i++)
{
f >> x;
a[0][i]=x;
}
int y,k=0;
for(int i=1;(1<<i)<=n;i++)
for(int j=1;j<=n;j++)
{
a[i][j]=a[i-1][a[i-1][j]];
}
for(int i=1;i<=m;i++)
{
f >> x >> y;
int aux=y;
k=0;
while(aux>1)
{
aux=aux>>1;
k++;
}
g << solve(x,y,k) << "\n";
}
/* for(int j=0;j<4;j++){
for(int i=1;i<=n;i++)
cout << a[j][i] << " ";
cout << "\n";
} */
return 0;
}