Pagini recente » Cod sursa (job #467452) | Cod sursa (job #2921007) | Cod sursa (job #2605981) | Cod sursa (job #3151950) | Cod sursa (job #726923)
Cod sursa(job #726923)
#include<stdio.h>
#include<vector>
#define Nmax 250002
using namespace std;
int n,m;
int a[20][Nmax];//a[i][j]=2^i-lea stramos a lui j
void citire()
{
int i;
scanf("%d %d",&n,&m);
for(i=1;i<=n;++i)
scanf("%d",&a[0][i]);
}
void rezolv()
{
int i,j,x,p;
for(i=1;i<=18;++i)
for(j=1;j<=n;++j)
a[i][j]=a[i-1][a[i-1][j]];//calculam 2^i stramos in functie de 2^(i-1)
for(i=1;i<=m;++i)
{
scanf("%d %d",&x,&p);
j=0;//puterea lui 2 pana in acest moment
while(p)
{
if(p&1)//daca primul bit a lui p este 1 <=> while(p%2==1)
x=a[j][x];//mergem la urmatorul stramos
++j;//crestem puterea lui 2
p=p>>1;//mutam fiecare bit a lui p cu o poz la dreapta <=> p=p/2;
}
printf("%d\n",x);
}
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
citire();
rezolv();
fclose(stdin);
fclose(stdout);
return 0;
}