Pagini recente » Cod sursa (job #1505207) | Cod sursa (job #2124069) | Cod sursa (job #1649090) | Cod sursa (job #204070) | Cod sursa (job #190741)
Cod sursa(job #190741)
#include<stdio.h>
int n,m,p,q;
int doi[250010];
int a[20][250010],log[20];
char c[1750010];
void citire()
{
fgets(c,1750010,stdin);
int i,aux=0,n1=0,aux1,aux2;
for(i=0; c[i]!='\0'; i++)
{
if(c[i]>='0')
{
aux1=aux<<3;
aux2=aux<<1;
aux=aux1+aux2+c[i]-'0';
}
else
{
a[0][++n1]=aux;
aux=0;
}
}
}
void citeste()
{
fgets(c,100,stdin);
p=q=0;
int i,j,q1,q2;
for(i=0; c[i]>='0'; i++)
{
q1=q<<3;
q2=q<<1;
q=q1+q2;
q+=c[i]-'0';
}
for(j=i+1; c[j]>='0'; j++)
p=p*10+c[j]-'0';
}
void precalc()
{
int x=2,y=0,i;
doi[1]=0;
for(i=2; i<=n; i++)
{
if(i==x)
{
x*=2;
y++;
}
doi[i]=y;
}
log[0]=1;
for(i=1; i<=doi[n]; i++)
log[i]=2*log[i-1];
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d\n",&n,&m);
int i,j;
citire();
precalc();
for(i=1; i<=doi[n]; i++)
{
for(j=1; j<=n; j++)
a[i][j]=a[i-1][a[i-1][j]];
}
for(i=0; i<m; i++)
{
citeste();
while((p)&&(q))
{
q=a[doi[p]][q];
p-=log[doi[p]];
}
printf("%d\n",q);
}
return 0;
}