Pagini recente » Cod sursa (job #395011) | Cod sursa (job #782708) | Cod sursa (job #3271167) | Cod sursa (job #580287) | Cod sursa (job #3230357)
#include<cstdio>
using namespace std;
FILE*in=fopen("stramosi.in","r");
FILE*out=fopen("stramosi.out","w");
const int NMAX=250007,LOGMAX=18;
int n,m,i,j,logn,op,por,logpor,q,p,ras;
int dad[NMAX][LOGMAX];
int main()
{
fscanf(in,"%d%d",&n,&m);
op=1;
logn=0;
while(op<=n)
{
logn++;
op*=2;
}
op/=2;
logn--;
for(i=1;i<=n;i++)
{
fscanf(in,"%d",&dad[i][0]);
}
for(j=1;j<=logn;j++)
{
for(i=1;i<=n;i++)
{
dad[i][j]=dad[dad[i][j-1]][j-1];
}
}
for(j=1;j<=m;j++)
{
fscanf(in,"%d%d",&q,&p);
ras=q;
por=op;
logpor=logn;
while(por>0)
{
if(por<=p)
{
ras=dad[ras][logpor];
p-=por;
}
por/=2;
logpor--;
}
fprintf(out,"%d\n",ras);
}
}