Cod sursa(job #1377361)

Utilizator tweetyMarinescu Ion tweety Data 5 martie 2015 21:22:50
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstring>
#include <fstream>
using namespace std;

int main()
{
    ifstream in("stramosi.in");
    ofstream out("stramosi.out");
    int N, M;
    int Q, P;
    int** Ancestors;

    in >> N >> M;

    Ancestors = new int*[N + 1];
    for (int x, i = 1; i <= N; ++i)
    {
        Ancestors[i] = new int[N + 1];
        memset(Ancestors[i], -1, sizeof(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[Ancestors[Q][j - 1]][1];

            Ancestors[Q][0] = P;
        }

        out << Ancestors[Q][P] << "\n";
    }

    return 0;
}