Cod sursa(job #1972433)

Utilizator mihai.alphamihai craciun mihai.alpha Data 23 aprilie 2017 10:02:08
Problema Stramosi Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

FILE *fin = fopen("stramosi.in", "r");
FILE *fout = fopen("stramosi.out", "w");

const int maxn = 250000, maxm = 300000, Lgn = 19;

int n, m, lg;

int tata[maxn + 1], dp[maxn + 1][Lgn + 2];

int main()  {
    fscanf(fin, "%d%d", &n, &m);
    for(int i = 1;i <= n;i++)
        fscanf(fin, "%d ", &tata[i]), dp[i][0] = tata[i];
    lg = (int)log(n);
    lg++;
    for(int i = 1;i <= n;i++)
        for(int j = 1;j <= lg;j++)  {
            dp[i][j] = dp[dp[i][j - 1]][j - 1];
        }
    for(int i = 1;i <= m;i++)  {
        int q, p;
        fscanf(fin, "%d%d", &q, &p);
        int ans = q, put = 0;
        while(p)  {
            if(p & 1)  {
                ans = dp[ans][put];
            }
            p >>= 1, put++;
        }
        fprintf(fout, "%d\n", ans);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}