Pagini recente » Cod sursa (job #2350783) | Cod sursa (job #2543739) | Cod sursa (job #3188096) | Cod sursa (job #3210483) | Cod sursa (job #68700)
Cod sursa(job #68700)
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
#define NMAX 250001
int ***stramosi;
int nr[20];
FILE *in = fopen("stramosi.in", "r"), *out = fopen("stramosi.out", "w");
int n, m,k;
inline int cauta(int pers, int ordin)
{
//printf("\n%d-%d\n",pers,ordin);
int oldpers=pers;
if (nr[oldpers]>=ordin)//(stramosi[oldpers][ordin]!=NULL)
pers=(int)stramosi[oldpers][ordin];
else
// printf("\naici\n");
//printf("\n%d-%d\n",(int)stramosi[pers][0]-1,ordin-1);
if (ordin>0)
if ((int)stramosi[pers][0]>0)
pers=cauta((int)stramosi[pers][0]-1,ordin-1);
else
pers=0;
else
pers=(int)stramosi[pers][0];
int * temp;
temp=new int;
*temp=pers;
stramosi[oldpers][ordin]=temp;
if(nr[oldpers]<ordin) nr[oldpers]=ordin;
return pers;
}
int main ()
{
int temp1, temp2;
fscanf(in, "%d %d", &n, &m);
stramosi = (int***)malloc(sizeof(int**)*n);
for (int a = 0; a < n; a++)
stramosi[a] = (int**)malloc(sizeof(int*)*1);
for ( int i = 0; i != n; ++i )
{
fscanf(in, "%d", &stramosi[i][0]);
nr[i]=0;
}
// for ( int i = 0; i != n; ++i )
// {
// printf("%d %d\n", stramosi[i][0],nr[i]);
// }
//
// printf("\n****\n");
for ( int i = m-1; i != -1; --i )
{
fscanf(in, "%d %d", &temp1, &temp2);
// printf("%d %d \n****\n",temp1,temp2);
k=cauta(temp1-1, temp2-1);
fprintf(out, "%d\n",k );
//printf("%d\n", k);
}
return 0;
}