Pagini recente » Cod sursa (job #857948) | Cod sursa (job #1092256) | Cod sursa (job #23656) | Cod sursa (job #944261) | Cod sursa (job #3209856)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n,m,tata[250001];
int str[250001][250001];
int rezolv(int k, int p, int d){
int contor=1;
for(int i=0;i<20;i++){
if(contor+d>p)
break;
if(contor+d==p&&str[k][i])
return str[k][i];
else
if(!str[k][i])
return 0;
contor*=2;
}
contor/=2;
return rezolv(str[k][contor+d-1],p,contor+d);
}
void stramosi(int node,int i){
if(!str[node][i-1])
return;
int dx=str[node][i-1];
if(!str[dx][i-1])
return;
str[node][i]=str[dx][i-1];
stramosi(node,i+1);
}
int main() {
int a;
fin>>n>>m;
for(int i=1;i<=n;i++){
fin>>a;
str[i][0]=a;
}
for(int i=1;i<=n;i++){
stramosi(i,1);
}
int k,p;
for(int i=1;i<=m;i++){
fin>>k>>p;
fout<<rezolv(k,p,0)<<endl;
}
/*for(int i=1;i<=n;i++){
for(int j=0;str[i][j];j++)
cout<<str[i][j]<<" ";
cout<<endl;
}*/
return 0;
}