Cod sursa(job #1786678)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 23 octombrie 2016 14:29:21
Problema Stramosi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>
#define MAX_N 250000
using namespace std;
int v[MAX_N+2][19];

int main()
{
  int n, m, i, j, pe, a, nr, p;
  FILE *fi=fopen("stramosi.in", "r"), *fo=fopen("stramosi.out", "w");
  fscanf(fi, "%d%d", &n, &m);
  for(i=1;i<=n;i++)
    fscanf(fi, "%d", &v[i][0]);
  for(i=1;i<=n;i++){
    pe=1;
    a=i;
    j=0;
    do{
      j++;
      a=v[a][0];
      if(j==1<<pe){
        v[i][pe]=a;
        pe++;
      }
    }while(a!=0);
  }
  for(j=0;j<m;j++){
    fscanf(fi, "%d%d", &a, &nr);
    pe=0;
    p=1;
    while(p<=nr){
      p*=2;
      pe++;
    }
    for(pe--;pe>=0;pe--)
      if(1<<pe<=nr){
        a=v[a][pe];
        nr-=(1<<pe);
      }
    fprintf(fo, "%d\n", a);
  }
  fclose(fi);
  fclose(fo);
  return 0;
}