Pagini recente » Cod sursa (job #2506741) | Cod sursa (job #1079041) | Cod sursa (job #112408) | Cod sursa (job #496646) | Cod sursa (job #655790)
Cod sursa(job #655790)
#include <cstdio>
#define BUFFER_SIZE 5375000
using namespace std;
//5.250.000 5.500.000
int n, m, a[19][251000], nod, str, sol, ind;
char buffer[BUFFER_SIZE];
inline void take(int &n)
{
int ret = 0;
while (!(buffer[ind] >= '0' && buffer[ind] <= '9')) ++ind;
while (buffer[ind] >= '0' && buffer[ind] <= '9')
ret = ret * 10 + buffer[ind] - '0', ++ind;
n = ret;
}
int main()
{
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
fread(buffer, 1, BUFFER_SIZE, stdin);
take(n);
take(m);
for (int i = 1; i <= n; ++i)
take(a[0][i]);
for (int i = 1; i <= 18; ++i)
for (int j = 1; j <= n; ++j)
a[i][j] = a[i - 1][a[i - 1][j]];
for (int i = 1; i <= m; ++i)
{
take(nod); take(str);
sol = nod;
int nr = 0;
while (str > 0 && sol)
{
if (str & 1)
sol = a[nr][sol];
++nr;
str >>= 1;
}
printf("%d\n", sol);
}
return 0;
}