Pagini recente » Cod sursa (job #2921077) | Borderou de evaluare (job #1567630) | Cod sursa (job #136897) | Cod sursa (job #2948256) | Cod sursa (job #783901)
Cod sursa(job #783901)
#include<cstdio>
#define maxn 250010
#define maxlog 20
using namespace std;
int log[maxn],n,m,a[maxlog][maxn] ;
int query(int q,int p)
{
if( p == 0 )
return q ;
if( q == 0 )
return 0 ;
q = a[ log[p] ][ q ] ;
p -= ( 1<< ( log[p] ) ) ;
return query(q,p) ;
}
void rmq()
{
for(int i=1;i<n;++i)
for(int j=1;j<=n;++j)
a[i][j] = a[i-1][ a[i-1][j] ] ;
for(int i=2;i<=n;++i)
log[i] = log[i>>1] + 1 ;
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
scanf("%d",&a[0][i]) ;
rmq() ;
for(int i=1;i<=m;++i)
{
int p,q ;
scanf("%d%d",&q,&p) ;
if(p>n)
printf("0\n") ;
else
printf("%d\n",query(q,p));
}
return 0;
}