Cod sursa(job #1724199)

Utilizator cella.florescuCella Florescu cella.florescu Data 2 iulie 2016 15:15:38
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>
#define MAXN 250000
#define MAXLOG 18

using namespace std;

int str[MAXLOG][MAXN+1];

int main()
{
    FILE *fin, *fout;
    int q, p, n, m, i, p2;
    fin=fopen("stramosi.in", "r");
    fscanf(fin, "%d%d", &n, &m);
    for(i=1; i<=n; i++)
      fscanf(fin, "%d", &str[0][i]);
    for(p2=1; (1<<p2)<=n; p2++)
      for(i=1; i<=n; i++)
        str[p2][i]=str[p2-1][str[p2-1][i]];
    fout=fopen("stramosi.out", "w");
    for(i=0; i<m; i++){
      fscanf(fin, "%d%d", &q, &p);
      p2=0;
      while((1<<p2)<=p && q>0){
        if((1<<p2)&p)
          q=str[p2][q];
        ++p2;
      }
      fprintf(fout, "%d\n", q);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}