Pagini recente » Cod sursa (job #1098734) | Cod sursa (job #376742) | Cod sursa (job #1709144) | Cod sursa (job #909933) | Cod sursa (job #481628)
Cod sursa(job #481628)
#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[18][250001];
int main()
{
FILE* fisIn = fopen(FILE_IN, "r");
FILE* fisOut = fopen(FILE_OUT, "w+");
fscanf(fisIn, "%d %d", &N, &M);
int* ptr = &anc[0][0];
*(ptr++) = 0;
for (int i=1; i<=N; i++) fscanf(fisIn, "%d", ptr++);
int* ptr2;
for (int j=0; j<17; j++)
{
ptr2 = &anc[j+1][0];
ptr = &anc[j][0];
for (int i=0; i<=N; i++) ptr2[i] = ptr[ptr[i]];
}
for (int i=0; i<M; i++)
{
int P,Q;
fscanf(fisIn, "%d %d", &Q, &P);
if (P > 250000) Q=P=0;
while (P && Q)
{
int bit = 31-__builtin_clz(P);
P -= 1<<bit;
Q = anc[bit][Q];
}
fprintf(fisOut, "%d\n", Q);
}
fclose(fisIn);
fclose(fisOut);
}