Cod sursa(job #79483)

Utilizator coderninuHasna Robert coderninu Data 22 august 2007 18:00:33
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
#include <stdlib.h>
#define infile "stramosi.in"
#define outfile "stramosi.out"
#define nmax 250001

long n, m, c[nmax], i, q, p, j;
long *v[nmax];

int main()
{
 int temp;
 freopen(infile, "r", stdin);
 freopen(outfile, "w", stdout);
 scanf("%ld %ld\n", &n, &m);
 for (i=1; i<=n; i++)
     {
      scanf("%ld ", &c[i]);
      v[i]=(long *)calloc(1, sizeof(long));
     }

 for (int l=1; l<=m; l++)
     {
      scanf("%ld %ld\n", &q, &p);
      i=q;
      j=i;
      while(c[j])
	  {
	   if (v[c[j]][0])
	       {
		v[i]=(long *)realloc(v[i], (v[i][0]+v[c[j]][0]+3)*sizeof(long));
		v[i][++v[i][0]]=c[j];
		for (long k=1; k<=v[c[j]][0]; k++)
		    v[i][v[i][0]+k]=v[c[j]][k];
		v[i][0]+=v[c[j]][0];
		break;
	       }
	   else
	       {
		v[i][++v[i][0]]=c[j];
		j=c[j];
	       }
	  }
      if (v[q][0]>=p)
	  printf("%ld\n", v[q][p]);
      else
	  printf("0\n");
     }
 fclose(stdin);
 fclose(stdout);
 return 0;
}