Pagini recente » Cod sursa (job #1894105) | Cod sursa (job #2167870) | Cod sursa (job #2529547) | Cod sursa (job #1931595) | Cod sursa (job #2786962)
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
int v[250001];
int str[18][250001],n,i,j;
int lsb(int x){return (x&(-x));}
int nrlsb(int x){return log2(lsb(x));}
void pre()
{
for(i=1; i<=n; i++)
str[0][i]=v[i];
for(i=1; (1<<i)<n; i++)
for(j=1; j<=n; j++)
str[i][j]=str[i-1][str[i-1][j]];
}
int query(int x,int k)
{
while(k>0)
{
x=str[nrlsb(k)][x];
k-=lsb(k);
}
return x;
}
int main()
{
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
int k,a,b;
cin>>n>>k;
for(i=1; i<=n; i++)
cin>>v[i];
pre();
for(i=1; i<=k; i++)
{
cin>>a>>b;
cout<<query(a,b)<<'\n';
}
return 0;
}