Pagini recente » Cod sursa (job #1830239) | Cod sursa (job #1661631) | Cod sursa (job #2753844) | Cod sursa (job #1685084) | Cod sursa (job #1954552)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int LOG2[250005];
int STR[22][250005];
int n,q;
void read(){
in>>n>>q;
for(int i=1;i<=n;i++){
in>>STR[0][i];
}
}
void logs(){
for(int i=2;i<=n;i++){
LOG2[i]=LOG2[i/2]+1;
}
}
void prep(){
logs();
for(int i=1;(1<<i)<=n;i++){
for(int j=1;j<=n;j++){
STR[i][j]=STR[i-1][STR[i-1][j]];
//! 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[l][str];
}
out<<str<<"\n";
}
}
int main(){
read();
prep();
queries();
return 0;
}