Cod sursa(job #575842)

Utilizator UpL1nKPaunescu Sorin UpL1nK Data 8 aprilie 2011 19:49:11
Problema Stramosi Scor 100
Compilator cpp Status done
Runda pregatire_oni2011_runda1 Marime 0.78 kb
#include <cstdio>
#define Nmax 250001
using namespace std;

int n, m;
int q, p;

int lg[Nmax];
int a[19][Nmax];

void proc();

int main() {

    freopen("stramosi.in", "r", stdin);
    freopen("stramosi.out", "w", stdout);

    scanf("%d %d", &n, &m);

    lg[1] = 0;

    for (int i = 2; i <= n; i++)
        lg[i] = lg[i/2] + 1;

    for (int i = 1; i <= n; i++)
        scanf("%d ", &a[0][i]);

    proc();

    for (int i = 1; i <= m; i++) {
        scanf("%d %d", &q, &p);
        while (p) {
            q = a[lg[p]][q];
            p = p - (1 << lg[p]);
        }
        printf("%d\n", q);
    }

    return 0;
}

void proc() {
    for (int i = 1; (1 << i) <= n; i++)
        for (int j = 1; j <= n; j++)
            a[i][j] = a[i-1][a[i-1][j]];
}