Pagini recente » Cod sursa (job #1545413) | Cod sursa (job #150479) | Cod sursa (job #2133504) | Cod sursa (job #2164990) | Cod sursa (job #1673130)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
const int NMAX = 250001;
int sp[NMAX][20];
int n,m;
int height;
int lg[NMAX];
void citire()
{
in>>n>>m;
for(int i=1;i<=n;i++)
in>>sp[i][0];
}
void sparse_table()
{
for(int i=2;i<=n;i++)
lg[i] = lg[i/2] + 1;
for(int j=1;(1<<j)<=n;j++)
for(int i=1;i<=n;i++)
sp[i][j] = sp[sp[i][j-1]][j-1];
}
int main()
{
citire();
sparse_table();
int x,y,k;
for(int i=1;i<=m;i++)
{
in>>x>>y;
while(y)
{
k = lg[y];
x = sp[x][k];
y = y-(1<<k);
}
out<<x<<"\n";
}
in.close();
out.close();
return 0;
}