Pagini recente » Borderou de evaluare (job #1569058) | Cod sursa (job #1732247) | Cod sursa (job #1783780) | Cod sursa (job #1854176) | Cod sursa (job #778380)
Cod sursa(job #778380)
#include<cstdio>
#include<cstring>
using namespace std;
int n,nq,i,j,k;
int a[20][250001];
char buff1[20];
char buff2[1760000];
int q,x,nrc;
int get_number1()
{int nrn=0;
while(buff1[nrc]<='9' && buff1[nrc]>='0')
{nrn=nrn*10+buff1[nrc]-'0';
nrc++;}
return nrn;
}
int get_number2()
{int nrn=0;
while(buff2[nrc]<='9' && buff2[nrc]>='0')
{nrn=nrn*10+buff2[nrc]-'0';
nrc++;}
return nrn;
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
gets(buff1);
nrc=0;
n=get_number1();
nrc++;
nq=get_number1();
gets(buff2);
nrc=0;
for(i=1; i<=n; i++)
{a[0][i]=get_number2();
nrc++;}
for(j=1; j<=n; j++)
for(i=1; i<=18; i++)
{if(a[i-1][a[i-1][j]])
a[i][j]=a[i-1][a[i-1][j]];
else
break;}
for(i=1; i<=nq; i++)
{gets(buff1);
nrc=0;
x=get_number1();
nrc++;
q=get_number1();
j=0;
while(q)
{if(q&1)
x=a[j][x];
j++;
q=q>>1;}
printf("%d\n",x);
}
return 0;
}