Pagini recente » Clasamentul arhivei de probleme | Cod sursa (job #2132905) | Cod sursa (job #2431203) | Clasamentul arhivei de probleme | Cod sursa (job #975587)
Cod sursa(job #975587)
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#include <algorithm>
#include <utility>
#include <string.h>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
const int MAXN = 250005;
const int MAXLG = 19;
const int oo = (1<<31)-1;
int dp[MAXLG][MAXN], N, M;
inline int getAncestor(int guy, int ancestor) {
for(int i = 0; (1 << i) <= ancestor; i++) {
if((1 << i) & ancestor)
guy = dp[i][guy];
}
return guy;
}
int main()
{
cin >> N >> M;
for(int i = 1 ; i <= N ; ++ i)
cin >> dp[0][i];
for(int i = 1 ; (1 << i ) <= N ; ++ i)
for(int j = 1 ; j <= N ; ++ j)
dp[i][j] = dp[i-1][ dp[i-1][j] ];
for(int i = 1 ; i <= M ; ++ i){
int X, Y;
cin >> X >> Y;
cout << getAncestor(X, Y) << "\n";
}
cin.close();
cout.close();
return 0;
}