Pagini recente » Cod sursa (job #2712658) | Cod sursa (job #577090) | Cod sursa (job #2630379) | Cod sursa (job #1925489) | Cod sursa (job #1167531)
#include<fstream>
#include<bitset>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n,m,dp[250005][21];
short logaritm[250005];
inline int putere(int x)
{
if (x==0) return 1;
else return 2*putere(x-1);
}
inline void Citire()
{
int i,j;
fin>>n>>m;
for (i=1;i<=n;i++)
fin>>dp[i][0];
for (i=2;i<=n;i++)
logaritm[i]=logaritm[i/2]+1;
for (i=1;i<=n;i++)
for (j=1;j<=20;j++)
dp[i][j]=dp[dp[i][j-1]][j-1];
}
inline void DP()
{
int i,Q,p,aux,tata;
for (i=1;i<=m;i++)
{
fin>>Q>>p;tata=0;
while (p)
{
aux=logaritm[p];
p=p-putere(aux);
if (dp[Q][aux]==0)
p=0;
else
{
tata=dp[Q][aux];
Q=tata;
}
}
fout<<tata<<"\n";
}
}
int main()
{
Citire();
DP();
return 0;
}