Cod sursa(job #287833)

Utilizator Sorin_IonutBYSorynyos Sorin_Ionut Data 25 martie 2009 11:18:04
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>

#define IN "stramosi.in"
#define OUT "stramosi.out"
#define max1 262144
#define max2 32

FILE *fin=fopen(IN,"r");
FILE *fout=fopen(OUT,"w");

int s[max2][max1];
int n,m;

void cit();
void alg();

int main()
{
 cit();
 alg();
  fclose(fin);
  fclose(fout);

 return 0;
}

void cit()
{
 int i,j;
 int x,log2;

 fscanf(fin,"%d %d",&n,&m);
 for(i=1;i<=n;i++)
  fscanf(fin,"%d",&s[0][i]);

 log2=0;
 x=n;
 while(x)
 {
  x/=2;
  log2++;
 }

 for(i=1;i<=log2;i++)
  for(j=1;j<=n;j++)
   s[i][j]=s[i-1][s[i-1][j]];
}

void alg()
{
 int x,y;
 int i,niv;

 for(i=1;i<=m;i++)
 {
  fscanf(fin,"%d %d",&x,&y);
  niv=0;
  while(y && x) /// ambele dif de 0
  {
   if(y & 1)
    x=s[niv][x];
   y>>=1;
   niv++;
  }
  fprintf(fout,"%d\n",x);
 }
}