Pagini recente » Cod sursa (job #2712269) | Cod sursa (job #818776) | Cod sursa (job #544209) | Cod sursa (job #2937450) | Cod sursa (job #1380027)
#include<fstream>
#include<cmath>
#include<iostream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int a[20][250005],b[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,depth,maxi=0,x;
for(i=1;i<=n;i++){
depth=1;
if(b[i]==0){
x=i;
while(x){
x=a[0][x];
depth++;
b[x]=1;
}}
if(depth>maxi)
maxi=depth;}
for(i=1;i<=Log[maxi];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();
aranjare();
for(i=0;i<m;i++){
f>>q>>p;
rez(p,q);
}
return 0;
}