Pagini recente » Cod sursa (job #514062) | Rating Banil Ardej (somu) | Cod sursa (job #1862415) | Cod sursa (job #1379800) | Cod sursa (job #2503356)
#include <iostream>
using namespace std;
int n, m, x, y, k;
int tata[25][250005];
const int Lim = 10000000;
int u = Lim - 1;
char s[Lim];
void Next () {
if (++u == Lim)
fread(s, 1, Lim, stdin), u = 0;
}
void Get (int &_x) {
for (; s[u] < '0' || s[u] > '9'; Next());
for (_x = 0; s[u] >= '0' && s[u] <= '9'; Next())
_x = _x * 10 + s[u] - '0';
}
int main() {
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
Get(n);
Get(m);
for (int i = 1; i <= n; ++i)
Get(tata[1][i]);
bool gata = false;
for (int i = 1; !gata; ++i) {
gata = true;
for (int j = 1; j <= n; ++j) {
tata[i + 1][j] = tata[i][tata[i][j]];
if (tata[i + 1][j])
gata = false;
}
}
while (m--) {
Get(x);
Get(y);
for (int i = 0; i <= 19; ++i)
if (y & (1 << i))
x = tata[i + 1][x];
cout << x << '\n';
}
return 0;
}