Cod sursa(job #1477770)

Utilizator akaprosAna Kapros akapros Data 26 august 2015 21:49:41
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxN 250002
#define maxA 19
using namespace std;
int n, m, i, j, anc[maxN][maxA], p, q;
void read()
{
    freopen("stramosi.in", "r", stdin);
    scanf("%d %d", &n, &m);
    for (i = 1; i <= n; ++ i)
    {
        scanf("%d", &anc[i][0]);
        for (j = 1; 1 << j <= i; ++ j)
            anc[i][j] = anc[anc[i][j - 1]][j - 1];
    }
}
void print()
{
    int p, q;
    freopen("stramosi.out", "w", stdout);
    while (m --)
    {
        scanf("%d %d", &q, &p);
        for (i = 0; 1 << i <= p; ++ i)
            if (p & (1 << i))
                {
                    q = anc[q][i];
                    if (q == 0)
                        break;
                }
        printf("%d\n", q);
    }
}
int main()
{
    read();
    print();
    return 0;
}