Pagini recente » Cod sursa (job #169756) | Cod sursa (job #1275308) | Cod sursa (job #64744) | Cod sursa (job #482303) | Cod sursa (job #642971)
Cod sursa(job #642971)
#include <fstream>
#define NMax 250005
#define LgMax 19
using namespace std;
int N, Ancestor[LgMax][NMax], Log2[NMax];
void BuildLog2 ()
{
for (int i=2; i<=250000; ++i)
{
Log2[i]=Log2[i/2]+1;
}
}
void BuildAncestor ()
{
BuildLog2 ();
for (int i=1; i<=Log2[N]; ++i)
{
for (int j=1; j<=N; ++j)
{
Ancestor[i][j]=Ancestor[i-1][Ancestor[i-1][j]];
}
}
}
int FindAncestor (int X, int K)
{
while (K>0)
{
X=Ancestor[Log2[K]][X];
K-=(1<<Log2[K]);
}
return X;
}
int main()
{
ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");
int M;
fin >> N >> M;
for (int i=1; i<=N; ++i)
{
fin >> Ancestor[0][i];
}
BuildAncestor ();
for (; M>0; --M)
{
int X, Y;
fin >> X >> Y;
fout << FindAncestor (X, Y) << "\n";
}
return 0;
}