Pagini recente » Cod sursa (job #1118544) | Cod sursa (job #1310853) | Cod sursa (job #2020604) | Cod sursa (job #2583) | Cod sursa (job #472617)
Cod sursa(job #472617)
#include<cstdio>
#include<cstdlib>
#include<map>
#define MAX_N 320002
#define LOG_MAX_N 16
#define MAX_INTREBARI 320002
int stramosi[MAX_N][LOG_MAX_N];
int intrebari_s[MAX_INTREBARI];
int intrebari_r[MAX_INTREBARI];
int get_stramos(int s, int r)
{
int i = 0;
while(r)
{
if(r % 2)
{
s = stramosi[s][i];
}
r /= 2;
if(s < 0)
for(;;);
i++;
}
return s;
}
int build_ances_matrice(int N)
{
int i = 0, j = 0;
for(i = 1; i < LOG_MAX_N; i++)
{
for(j = 1; j < N; j++)
{
stramosi[j][i] = stramosi[stramosi[j][i-1]][i-1];
}
}
return i;
}
int main()
{
int i = 0, M,N;
FILE* f = fopen("stramosi.in", "r");
fscanf(f, "%d %d", &N, &M);
for(; i < N; i++)
{
int ch;
fscanf(f, "%d", &ch);
stramosi[i+1][0] = ch;
}
for(i = 0; i < M; i++)
{
fscanf(f, "%d %d", &intrebari_s[i+1], &intrebari_r[i+1]);
}
fclose(f);
build_ances_matrice(N);
f = fopen("stramosi.out", "w");
for(i = 1; i <= M; i++)
fprintf(f, "%d\n", get_stramos(intrebari_s[i], intrebari_r[i]));
fclose(f);
return 0;
}