Pagini recente » Cod sursa (job #311997) | Cod sursa (job #713954) | Cod sursa (job #191636) | Cod sursa (job #1429897) | Cod sursa (job #744372)
Cod sursa(job #744372)
#include <cassert>
#include <cstdio>
#include <cstdlib>
const int nmax=250000, n2max=18;
char *buffer;
int f[n2max+1][nmax+1];
void read(int &x){
while (*buffer<'0'||*buffer>'9'){
++buffer;
}
x=0;
while (*buffer>='0'&&*buffer<='9'){
x=x*10+*buffer-'0';
++buffer;
}
}
int main(){
int n, m, fs;
assert(freopen("stramosi.in", "r", stdin));
fseek(stdin, 0, SEEK_END);
fs=ftell(stdin);
rewind(stdin);
buffer=(char*)malloc(fs);
assert(fread(buffer, 1, fs, stdin));
fclose(stdin);
read(n);
read(m);
for (int i=1; i<=n; ++i){
read(f[0][i]);
}
for (int i=1; (1<<i)<=n; ++i){
for (int j=1; j<=n; ++j){
f[i][j]=f[i-1][f[i-1][j]];
}
}
assert(freopen("stramosi.out", "w", stdout));
for (; m; --m){
int x, y;
read(x);
read(y);
for (int i=0; (1<<i)<=y; ++i){
if ((1<<i)&y){
x=f[i][x];
}
}
printf("%d\n", x);
}
fclose(stdout);
return 0;
}