Pagini recente » Cod sursa (job #1150319) | Cod sursa (job #2849397) | Cod sursa (job #2905879) | Cod sursa (job #2186264) | Cod sursa (job #1954539)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int LOG2[250005];
int STR[250005][22];
int n,q;
void read(){
in>>n>>q;
for(int i=1;i<=n;i++){
in>>STR[i][0];
}
}
void logs(){
for(int i=2;i<=n;i++){
LOG2[i]=LOG2[i/2]+1;
}
}
void prep(){
logs();
for(int i=1;i<=n;i++){
for(int j=1;(1<<j)<=n;j++){
STR[i][j]=STR[STR[i][j-1]][j-1];
//! stramosul de gradul 2^j al lui i este stramosul de gradul 2^(j-1) al stramosului de gradul 2^(j-1) a lui i
}
}
}
void queries(){
int x,l,str;
for(int i=1;i<=q;i++){
in>>str>>x;
while(x!=0){
l=LOG2[x];
x-=(1<<l);
str=STR[str][l];
}
out<<str<<"\n";
}
}
int main(){
read();
prep();
queries();
return 0;
}