Cod sursa(job #114798)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 15 decembrie 2007 22:12:28
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#define P(x,y) if(y>=131072){x=18;y-=131072;} else if(y>=65536){x=17;y-=65536;}  else if(y>=32768){x=16;y-=32768;}  else if(y>=16384){x=15;y-=16384;}  else if(y>=8192){x=14;y-=8192;}  else if(y>=4096){x=13;y-=4096;}  else if(y>=2048){x=12;y-=2048;}  else if(y>=1024){x=11;y-=1024;}  else if(y>=512){x=10;y-=512;}  else if(y>=256){x=9;y-=256;}  else if(y>=128){x=8;y-=128;}  else if(y>=64){x=7;y-=64;}  else if(y>=32){x=6;y-=32;}  else if(y>=16){x=5;y-=16;}  else if(y>=8){x=4;y-=8;}  else if(y>=4){x=3;y-=4;}  else if(y>=2){x=2;y-=2;}  else {x=1;y-=1;}
#include <string.h>
#include <fstream.h>
#define N 300000
int main ()
{
 ifstream fin("stramosi.in");
 ofstream fout("stramosi.out");

 long n,m,i,j,x,y,s;
 long q[20][N];
 memset(q,0,sizeof(q));
 fin>>n>>m;
 for (i=1;i<=n;i++)
 {fin>>q[1][i];}

 for (i=2;i<=18;i++)
 {for (j=1;j<=n;j++)
  {q[i][j]=q[i-1][q[i-1][j]];
  }
 }


 for (i=1;i<=m;i++)
 {fin>>x>>y;
  while(y)
  {P(s,y)
   x=q[s][x];
  }
  fout <<x<<'\n';
 }
 return 0;
}