Pagini recente » Cod sursa (job #3136419) | Cod sursa (job #775835) | Cod sursa (job #2748796) | Cod sursa (job #2967605) | Cod sursa (job #739402)
Cod sursa(job #739402)
#include <fstream>
#include <cmath>
using namespace std;
int N, M, a;
int v[20][250010];
int gata[250010];
ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");
void Citire ()
{
fin >> N >> M;
a = (int) log2 (N);
for (int i = 1; i <= N; i++)
{
fin >> v[0][i];
if (v[0][i] == 0)
{
gata[i] = 1;
for (int j = 1; j <= a; j++)
{
v[j][i] = 0;
}
}
else gata[i] = 0;
}
}
void Initializare (int i)
{
if (gata[i] == 1) return;
Initializare (v[0][i]);
for (int j = 1; j <= a; j++)
{
v[j][i] = v[j - 1][v[i][j - 1]];
}
gata[i] = 1;
}
void Business ()
{
for (int i = 1; i <= N; i++)
{
Initializare (i);
}
}
void Solve ()
{
int Q, P, alfa;
for (int k = 0; k < M; k++)
{
fin >> Q >> P;
while (P > 0)
{
alfa = (int) log2 (P);
Q = v[alfa][Q];
P -= 1 << alfa;
}
fout << Q << "\n";
}
fin.close ();
fout.close ();
}
int main ()
{
Citire ();
Business ();
Solve ();
return 0;
}