Pagini recente » Cod sursa (job #2925611) | Cod sursa (job #1156456) | Cod sursa (job #817200) | Cod sursa (job #1419281) | Cod sursa (job #660937)
Cod sursa(job #660937)
#include <fstream>
#include <vector>
using namespace std;
#define DIM 250001
#define tg (sw ? 0 : 1)
ifstream fi ("stramosi.in");
ofstream fo ("stramosi.out");
int N, M, P, Q;
int S[20][DIM];
void cit ()
{
fi >> N >> M;
for (int i = 1, x; i <= N; i++)
{
fi >> S[0][i];
}
}
void prep ()
{
int i, j, sw = 0, a[2][N+1], n;
a[sw][0] = 0;
for (i = 1; i <= N; i++)
a[sw][++a[sw][0]] = i;
for (j = 1; a[sw][0]; j++)
{
sw = tg;
a[sw][0] = 0;
for (i = 1; i <= a[tg][0]; i++)
{
n = a[tg][i];
if (S[j-1][n] == 0)
continue;
a[sw][++a[sw][0]] = n;
S[j][n] = S[j-1][S[j-1][n]];
}
}
}
void calc ()
{
for (int r = 0; P != 0 && Q != 0; r++)
{
if (P >> r & 1)
{
P = P ^ (1 << r);
Q = S[r][Q];
}
}
}
int main ()
{
cit ();
prep ();
while (M--)
{
fi >> Q >> P;
calc ();
fo << Q << '\n';
}
return 0;
}