Pagini recente » Cod sursa (job #3154166) | Cod sursa (job #1847054) | Cod sursa (job #1350139) | Cod sursa (job #1340444) | Cod sursa (job #1909)
Cod sursa(job #1909)
#include <stdio.h>
const char *fin = "stramosi.in";
const char *fout = "stramosi.out";
int n, m;
int str[20][250100];
inline void genStr(const int count) {
for (int i = 1, dp = (count + 1) >> 1; dp; ++i, dp >>= 1) {
for(int j = 0; j <= count; ++j) {
str[i][j] = str[i - 1][str[i - 1][j]];
}
}
}
int getStr(int q, int p) {
int c = 0;
//p >>= 1;
while (p) {
if (p & 1) {
q = str[c][q];
}
c++;
p >>= 1;
}
return q;
}
int main() {
FILE *fi = fopen(fin, "rt"), *fo = fopen(fout, "wt");
fscanf(fi, "%d %d", &n, &m);
for (int i = 1; i <= n; ++i){
fscanf(fi, "%d", &str[0][i]);
}
str[0][0] = 0;
genStr(n);
int p = 0, q = 0;
for (int i = 0; i <m; ++i) {
fscanf(fi, "%d %d", &q, &p);
fprintf(fo, "%d\n", getStr(q, p));
}
fclose(fi);
fclose(fo);
return 0;
}