Pagini recente » Cod sursa (job #643049) | Cod sursa (job #1289825) | Cod sursa (job #1844343) | Cod sursa (job #2439694) | Cod sursa (job #481625)
Cod sursa(job #481625)
#include <iostream>
#include <algorithm>
#include <fstream>
#include <string>
using namespace std;
#define FILE_IN "stramosi.in"
#define FILE_OUT "stramosi.out"
int N, M;
int anc[250001][18];
int main()
{
FILE* fisIn = fopen(FILE_IN, "r");
FILE* fisOut = fopen(FILE_OUT, "w+");
fscanf(fisIn, "%d %d", &N, &M);
anc[0][0] = 0;
for (int i=1; i<=N; i++) fscanf(fisIn, "%d", &anc[i][0]);
for (int j=0; j<17; j++)
{
int jp1 = j+1;
for (int i=0; i<=N; i++) anc[i][jp1] = anc[anc[i][j]][j];
}
for (int i=0; i<M; i++)
{
int P,Q;
fscanf(fisIn, "%d %d", &Q, &P);
while (P)
{
int bit = 31-__builtin_clz(P);
if (bit > 17) { Q = 0; break; }
P -= 1<<bit;
Q = anc[Q][bit];
}
fprintf(fisOut, "%d\n", Q);
}
fclose(fisIn);
fclose(fisOut);
}