Cod sursa(job #17601)

Utilizator cypryCiprian Oprisa cypry Data 16 februarie 2007 13:47:53
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
//stramosi
#include<stdio.h>

struct pers{
	 struct pers *urm,*stram;
	 long nrs,ord;
	};

long n,m;
struct pers *fam;

void citire1(void)
{
 long i;
 struct pers *p,*q;
 scanf("%ld %ld\n",&n,&m);
 fam=new struct pers;
 scanf("%ld",&fam->nrs);
 fam->ord=1;
 fam->urm=NULL;
 p=fam;
 for(i=2;i<=n;i++)
  {
   q=new struct pers;
   scanf("%ld",&q->nrs);
   q->urm=NULL;
   q->ord=i;
   p->urm=q;
   p=q;
  }
}

void legaturi(void)
{
 struct  pers *p,*q;
 for(p=fam;p!=NULL;p=p->urm)
  {
   if(p->nrs==0) p->stram=NULL;
    else
     {
      q=fam;
      while((q->ord) < (p->nrs))
       q=q->urm;
      p->stram=q;
     }
  }
}

void gaseste(void)
{
 long i,j,a,b;
 struct pers *p;
 for(i=1;i<=m;i++)
  {
   scanf("%ld %ld",&a,&b);
   p=fam;
   while(p->ord < a)
    p=p->urm;
   for(j=1;(j<b) && (p!=NULL);j++)
    p=p->stram;
   if(p!=NULL)
    printf("%ld\n",p->nrs);
     else printf("0\n");
  }
}

int main(void)
{
 freopen("stramosi.in","r",stdin);
 freopen("stramosi.out","w",stdout);
 citire1();
 legaturi();
 gaseste();
 fclose(stdin);
 fclose(stdout);
 return 0;
}