Pagini recente » Cod sursa (job #2082004) | Cod sursa (job #2563128) | Cod sursa (job #164298) | Cod sursa (job #1595072) | Cod sursa (job #2024923)
#include <bits/stdc++.h>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
const int MaxN = 250100;
int dp[20][MaxN];
int v[MaxN];
int logg[MaxN];
int query(int a, int b){
for(int log = 19; log >= 0; log --){
if((1<<log) <= b){
a = dp[log][a];
b -= 1<<log;
}
}
return a;
}
int main(){
int n, m;
f >> n >> m;
for(int i = 1; i <= n; ++i){
f >> v[i];
}
for(int i = 1; i <= n; ++i){
dp[0][i] = v[i];
}
for(int j = 1; j <= 19; j++){
for(int i = 1; i <= n; ++i){
dp[j][i] = dp[j-1][dp[j-1][i]];
}
}
for(int i = 1; i <= m; ++i){
int a, b;
f >> a >> b;
g << query(a, b) << '\n';
}
return 0;
}