Pagini recente » Cod sursa (job #1738299) | Cod sursa (job #1585500) | Cod sursa (job #2275228) | Cod sursa (job #409552) | Cod sursa (job #2469124)
#include <fstream>
using namespace std;
int n,m,i,j,x,y,k,afis,s,v[32][250005],pw[32],lg[250005];
int main()
{
ifstream f("stramosi.in");
ofstream g("stramosi.out");
f>>n>>m;
pw[0]=1;
for(i=1;i<=30;i++)
pw[i]=pw[i-1]*2;
k=0;
for(i=1;i<=n;i++)
if(pw[k]==i)
{
lg[i]=k;
k++;
}
else
lg[i]=k-1;
for(i=1;i<=n;i++)
{
f>>x;
v[0][i]=x;
}
for(i=1;i<=n;i++)
for(j=1;j<=lg[n];j++)
{
v[j][i]=v[j-1][v[j-1][i]];
if(v[j][i]==0)
break ;
}
for(i=1;i<=m;i++)
{
f>>x>>y;
s=0;
while(s!=y)
{
k=lg[y-s];
s+=pw[k];
afis=v[k][x];
if(afis==0)
break ;
x=afis;
}
g<<afis<<'\n';
}
return 0;
}