Cod sursa(job #288345)

Utilizator flamecataCiobanu Alexandru-Catalin flamecata Data 25 martie 2009 18:54:01
Problema Stramosi Scor 90
Compilator cpp Status done
Runda aa Marime 0.96 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,p=0;   
  
 fscanf(fin,"%d %d",&n,&m);   
 for(i=1;i<=n;i++)   
  fscanf(fin,"%d",&s[0][i]);   
  
 x=n;   
 while(x)   
 {   
  x/=2;   
  p++;   
 }   
  
 for(i=1;i<=p;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%2==1)   
    x=s[niv][x];   
   y>>=1;   
   niv++;   
  }   
  fprintf(fout,"%d\n",x);   
 }   
}