Pagini recente » Cod sursa (job #2284935) | Cod sursa (job #3246615) | Cod sursa (job #1829716) | Cod sursa (job #711719) | Cod sursa (job #1150215)
#include <fstream>
using namespace std;
#define maxN 250005
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int n,m,p,q;
int direct_ancestors[maxN];
int ancestors_matrix[21][maxN];
void reading()
{
in>>n>>m;
int i;
for(i=1;i<=n;++i)
in>>direct_ancestors[i];
}
void generate_ancestors()
{
int i,j;
for(j=1;j<=n;++j)
ancestors_matrix[0][j]=direct_ancestors[j];
for(i=1;i<=20;++i)
for(j=1;j<=n;++j)
ancestors_matrix[i][j]=ancestors_matrix[i-1][ancestors_matrix[i-1][j]];
}
int find_the_ancestor(int grade, int member)
{
int k;
for(k=20;k>=0;k--)
if((1<<k)&p) member=ancestors_matrix[k][member];
return member;
}
void find_ancestors()
{
int i;
for(i=1;i<=m;++i)
{
in>>q>>p;
out<<find_the_ancestor(p,q)<<'\n';
}
}
int main()
{
reading();
generate_ancestors();
find_ancestors();
in.close();
out.close();
return 0;
}