Pagini recente » Cod sursa (job #2877425) | Cod sursa (job #262676) | Cod sursa (job #295197) | Cod sursa (job #832725) | Cod sursa (job #788731)
Cod sursa(job #788731)
#include<cstdio>
using namespace std;
int m,n,i,j,desc[300001][6],p[250001],q[250001],nrs[250001],alzeces[300001];
int stramos(int membru, int alcpre)
{
int temp=0;
temp=desc[membru][1];
for(j=1;j<alcpre;j++)
{
temp=desc[temp][1];
if(temp==0)
{
break;
}
}
// printf("%d:%d\n",i,temp);
return temp;
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&desc[i][1]);
}
for(i=1;i<=m;i++)
{
scanf("%d",&q[i]);
scanf("%d",&p[i]);
}
for(i=1;i<=n;i++)
{
desc[i][2]=stramos(i,10);
desc[i][3]=stramos(i,100);
desc[i][4]=stramos(i,1000);
}
for(i=1;i<=m;i++)
{
int temp1=p[i];
int temp2=q[i];
while(temp1>=1000)
{
temp2=desc[temp1][4];
temp1-=1000;
}
while(temp1>=100)
{
temp2=desc[temp1][3];
temp1-=100;
}
while(temp1>=10)
{
temp2=desc[temp1][2];
temp1-=10;
}
if(temp1==0)
{
printf("%d\n",temp2);
}
else
{
printf("%d\n",stramos(temp2,temp1));
}
}
fclose(stdin);
fclose(stdout);
return 0;
}