Pagini recente » Cod sursa (job #475052) | Cod sursa (job #1922043) | Cod sursa (job #662941) | Cod sursa (job #2784743) | Cod sursa (job #1630733)
#include <fstream>
#include <cstdio>
using namespace std;
ofstream g("stramosi.out");
int n,m,i,j,p,nr,q,dp[250005][30];
int main()
{
freopen("stramosi.in","r",stdin);
scanf("%d%d",&n,&m);
for (i=1;i<=n;++i)
scanf("%d",&dp[i][0]);
p=1;
while (p<<1<=n)
{
p<<=1;
nr++;
}
p=0;
int ok;
for (j=1;j<=nr;++j)
{
ok=0;
for (i=1;i<=n;++i)
{
dp[i][j]=dp[dp[i][j-1]][j-1];
if (dp[i][j]!=0)
ok=1;
}
if (ok==0)
break;
}
for (i=1;i<=m;++i)
{
scanf("%d%d",&q,&p);
int nod = q;
for (int i = 0; (1<<i) <= p; ++i) {
if ((1<<i) & p) {
nod = dp[nod][i];
}
}
g<<nod<<'\n';
}
return 0;
}