Cod sursa(job #1972430)

Utilizator mihai.alphamihai craciun mihai.alpha Data 23 aprilie 2017 09:53:41
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[Lgn + 1][maxn + 1];

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