Pagini recente » Cod sursa (job #1685246) | Istoria paginii runda/gdrgasd | Cod sursa (job #2201778) | Cod sursa (job #2914223) | Cod sursa (job #349840)
Cod sursa(job #349840)
// @author: Mircea Dima
#include <cstdio>
#include <cstdlib>
#define N 250001
#define dim 8192
char ax[dim];
int pz;
inline void cit(int &x)
{
x = 0;
while(ax[pz] < '0' || ax[pz] > '9')
if(++pz == dim) fread(ax,1,dim,stdin), pz = 0;
while(ax[pz] >= '0' && ax[pz] <= '9')
{
x = x * 10 + ax[pz] - '0';
if(++pz == dim) fread(ax,1,dim,stdin),pz = 0;
}
}
int t[19][N];
int n, m;
void init()
{
int i, j;
for(i = 1; i <= 18; ++i)
for(j = 1; j <= n; ++j)
t[i][j] = t[i-1][t[i-1][j]];
/*
for(i = 0; i < 4; ++i)
{
for(j = 1; j <= n; ++j)
printf("%d ", t[i][j]);
printf("\n");
}
*/
}
int main()
{
freopen("stramosi.in","r",stdin);
cit(n); cit(m);
int i;
for(i = 1; i <= n; ++i)
cit(t[0][i]);
init();
int p, q;
freopen("stramosi.out","w",stdout);
while(m--)
{
cit(p); cit(q);
for(i = 18; i >= 0 && q; --i)
if(q - (1<<i) >= 0)
if(t[i][p] != 0) p = t[i][p], q -= (1<<i);
if(q != 0) p = 0;
printf("%d\n", p);
}
//system("pause");
return 0;
}