Pagini recente » Cod sursa (job #1050597) | Cod sursa (job #1682459) | Cod sursa (job #1607204) | Cod sursa (job #1573199) | Cod sursa (job #1396447)
#include <cstdio>
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <ctype.h>
#include <cstring>
#include <string>
#include <ctime>
#include <cassert>
#include <utility>
using namespace std;
#define LIM 250005
int dp[20][LIM], n, m, nod, stramos;
int main() {
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out","w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++) {
scanf("%d ", &stramos);
dp[0][i] = stramos;
}
for(int k = 1; k <= 20; k++) {
for(int i = 1; i <= n; i++) {
if(dp[k - 1][i] != 0)
dp[k][i] = dp[k - 1][dp[k - 1][i]];
}
}
// for(int k = 0; k <= 4; k++) {
// for(int i = 1; i <= n; i++) {
// cout << dp[k][i] << " ";
// }
// cout << "\n";
// }
for(int i = 0; i < m; i++) {
scanf("%d %d", &nod, &stramos);
int newS = nod;
for(int k = 0; k < 20; k++) {
if( (1 << k) & stramos) {
newS = dp[k][newS];
}
}
printf("%d\n", newS);
}
return 0;
}