Pagini recente » Cod sursa (job #3138627) | Cod sursa (job #601805) | Cod sursa (job #305015)
Cod sursa(job #305015)
#include<fstream.h>
#include<math.h>
int main()
{long int **b,k,i,j,m,n,p,q,raspuns;
ofstream g("stramosi.out");
ifstream f("stramosi.in");
f>>n>>m;
b=new long int*[19];
for(i=1;i<19;i++)
b[i]=new long int[n+1];
for(i=1;i<=n;i++)
f>>b[1][i];
k=1;
do{k++;
for(i=1;i<=n;++i) b[k][i]=b[k-1][b[k-1][i]];
}while((1<<k)<=n);
for(i=1;i<=m;i++)
{f>>q>>p;
k=0;
while((1<<k)<p) k++;
if((1<<k)>p) k--;
raspuns=b[k+1][q];
p=p-(1<<k);
while(p!=0)
{
k=0;
while((1<<k)<p) k++;
if((1<<k)>p) k--;
raspuns=b[k+1][raspuns];
p=p-(1<<k);
}
g<<raspuns<<'\n';
}
for(int i=1;i<19;i++)
delete b[i];
delete b;
f.close();
g.close();
return 0;
}