Pagini recente » Cod sursa (job #2779077) | Cod sursa (job #2224882) | Cod sursa (job #1545841) | Cod sursa (job #2946031) | Cod sursa (job #1714348)
#include<stdio.h>
#include<queue>
FILE *in, *out;
int N,M;
#define MAX 250001
int D[18][MAX],pos=0;
char buf[10000];
int readNumber(FILE *&f)
{
int nr = 0;
while (buf[pos] < '0' || buf[pos]>'9')
{
++pos;
if (pos == 10000)
{
pos = 0;
fread(buf, 1, 10000, in);
}
}
while (buf[pos] >= '0' && buf[pos]<='9')
{
nr = nr * 10 + (buf[pos] - '0');
++pos;
if (pos == 10000)
{
pos = 0;
fread(buf, 1, 10000, in);
}
}
return nr;
}
int main()
{
in = fopen("stramosi.in", "r");
out = fopen("stramosi.out", "w");
fread(buf, 1, 10000, in);
N=readNumber(in);
M=readNumber(in);
for (int i = 1;i <= N;++i)
D[0][i] = readNumber(in);
int i, j;
for (i = 1;(1 << i) <= N;++i)
for (j = 1;j <= N;++j)
D[i][j] = D[i - 1][D[i - 1][j]];
int P, Q;
for (i = 1;i <= M;++i)
{
Q=readNumber(in);
P=readNumber(in);
for (j = 0;P;P >>= 1, ++j)
if (P & 1)
Q = D[j][Q];
fprintf(out, "%d\n", Q);
}
return 0;
}