Pagini recente » Cod sursa (job #950479) | Cod sursa (job #2115198) | Cod sursa (job #1224350) | Cod sursa (job #2379513) | Cod sursa (job #1380037)
#include<fstream>
#include<cmath>
#include<iostream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int a[20][250005],Log[250005];
int n,m;
int Pow(int n,int p)
{
int sol=1;
while(p){
if(p%2)
sol=sol*n;
n=n*n;
p=p/2;
}
return sol;
}
void BuildLog()
{
int i;
for(i=2;i<=n;i++)
Log[i]=Log[i/2]+1;
}
void citire()
{
int i;
f>>n>>m;
for(i=1;i<=n;i++)
f>>a[0][i];
}
void aranjare()
{
int i,j;
for(i=1;i<=Log[n];i++)
for(j=1;j<=n;j++)
a[i][j]=a[i-1][a[i-1][j]];
}
void rez(int p,int q)
{
int red,ance=q;
while(p && ance){
red=Log[p];
ance=a[red][ance];
p-=Pow(2,red);
}
g<<ance<<"\n";
}
int main()
{
int i,p,q;
citire();
BuildLog();
aranjare();
for(i=0;i<m;i++){
f>>q>>p;
rez(p,q);
}
return 0;
}