Pagini recente » Cod sursa (job #428732) | Cod sursa (job #50845) | Solutii Summer Challenge, Runda 1 | Profil delia_99 | Cod sursa (job #304983)
Cod sursa(job #304983)
#include<stdio.h>
int main()
{
long int n,m,i,q,p,k=1,raspuns,**matrice;
FILE *pFile= fopen ("stramosi.in","r");
FILE *pFileOut= fopen("stramosi.out","w");
fscanf(pFile,"%ld %ld",&n,&m);
matrice=new long int*[19];
for(i=1;i<19;i++)
matrice[i]=new long int[n+1];
for(i=1;i<=n;i++)
fscanf(pFile,"%ld",&matrice[1][i]);
do
{k++;
for(i=1;i<=n;i++)
matrice[k][i]=matrice[k-1] [matrice[k-1][i]];
}while((1<<k)<=n);
for(i=1;i<=m;i++)
{
fscanf(pFile,"%ld",&q);
fscanf(pFile,"%ld",&p);
k=0;
while((1<<k)<p) k++;
if((1<<k)>p) k--;
raspuns=matrice[k+1][q];
p=p-(1<<k);
while(p!=0)
{
k=0;
while((1<<k)<p) k++;
if((1<<k)>p) k--;
raspuns=matrice[k+1][raspuns];
p=p-(1<<k);
}
fprintf(pFileOut,"%ld \n",raspuns);
}
for(int i=1;i<19;i++)
delete matrice[i];
delete matrice;
fclose(pFile);
fclose(pFileOut);
return 0;
}