Pagini recente » Cod sursa (job #915443) | Cod sursa (job #699214) | Borderou de evaluare (job #1661544) | Cod sursa (job #3279381) | Cod sursa (job #3231813)
#include <fstream>
using namespace std;
const int N = 25e4;
const int L = 15;
int s[L+1][N+1], n;
void constructie_s()
{
for (int i = 1; (1 << i) <= n; i++)
{
for (int j = 1; j <= n; j++)
{
s[i][j] = s[i-1][s[i-1][j]];
}
}
}
int interogare(int x, int nrs)
{
int i = 0;
while ((1 << i) <= nrs)
{
if (nrs & (1 << i))///daca bitul i al lui nrs este 1
{
x = s[i][x];
}
i++;
}
return x;
}
int main()
{
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int q;
in >> n >> q;
for (int j = 1; j <= n; j++)
{
in >> s[0][j];
}
constructie_s();
for (int i = 0; i < q; i++)
{
int x, nrs;
in >> x >> nrs;
out << interogare(x, nrs) << "\n";
}
in.close();
out.close();
return 0;
}