Cod sursa(job #1245357)

Utilizator FlorianFlorian Marcu Florian Data 18 octombrie 2014 23:50:03
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h>
#define Max 250003
FILE*f=fopen("stramosi.in","r");
FILE*g=fopen("stramosi.out","w");
long a[Max],m,n,q,b[20][Max];;
long stramos(long p, long q)
    {
    long k,sol;
    k=0;
    while(1<<k<=p) ++k;
    k--;
    if(p==0) return q;
    else return stramos(p-(1<<k),b[k][q]);
    }
void precalc()
    {
    int i,j,k=2;
    for(i=1;i<=n;++i)
        b[1][i]=a[a[i]],b[0][i]=a[i];
    for(k=2;1<<k<=n;++k)
        {
        for(i=1;i<=n;++i) b[k][i]=b[k-1][b[k-1][i]];
 
        }
    }
int main()
    {
    long i,p;
    long sol;
    fscanf(f,"%ld %ld",&n,&m);
    for(i=1;i<=n;++i) fscanf(f,"%ld",&a[i]);
    precalc();
    for(i=1;i<=m;++i)
        {
        fscanf(f,"%ld %ld",&q,&p);
        sol=stramos(p,q);
        fprintf(g,"%ld\n",sol);
        }
    return 0;
    }