Pagini recente » Cod sursa (job #2487759) | Cod sursa (job #2147178) | Cod sursa (job #52214) | Cod sursa (job #1554418) | Cod sursa (job #1207845)
#include <fstream>
#include <cmath>
using namespace std;
#define dim 250005
int dp[20][dim];
int main(){
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,m,p,q;
f >> n >> m;
for(int i=1;i<=n;i++)
f >> dp[0][i]; //stramosul direct pt fiecare i
for(int i=1;i<=log2(n);i++)
for(int j=1;j<=n;j++)
dp[i][j]=dp[i-1][dp[i-1][j]];
while(m--){
f >> q >> p;
for(int i=log2(n);i>=0;i--){
if(p>=(1<<i)){ //daca stramosul pe care il caut este mai mare
q=dp[i][q]; //stramosul nou din care caut
p-=(1<<i); //aflu al catelea stramos trebuie sa il gasesc din stramosul nou
}
}
g << q <<"\n";
}
}