Pagini recente » Cod sursa (job #756241) | Cod sursa (job #602546) | Cod sursa (job #2539937) | Cod sursa (job #2315887) | Cod sursa (job #1377373)
#include <cstring>
#include <fstream>
using namespace std;
int main()
{
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int N, M;
int Q, P;
unsigned short int** Ancestors;
in >> N >> M;
Ancestors = new unsigned short int*[N + 1];
for (int x, i = 1; i <= N; ++i)
{
Ancestors[i] = new unsigned short int[N + 1];
memset(Ancestors[i], -1, sizeof(unsigned short int) * (N + 1));
in >> x;
Ancestors[i][1] = x;
Ancestors[i][0] = 1;
}
for (int lastKnown, j, i = 1; i <= M; ++i)
{
in >> Q >> P;
lastKnown = Ancestors[Q][0];
if (P > lastKnown)
{
for (j = lastKnown + 1; j <= P; ++j)
Ancestors[Q][j] = Ancestors[Q][1] == 0 ? 0 : Ancestors[Ancestors[Q][j - 1]][1];
Ancestors[Q][0] = P;
}
out << Ancestors[Q][P] << "\n";
}
for (int i = 1; i <= N; ++i)
delete[] Ancestors[i];
delete[] Ancestors;
return 0;
}