Pagini recente » Cod sursa (job #2870144) | Cod sursa (job #1624165) | Cod sursa (job #811757) | Cod sursa (job #282228) | Cod sursa (job #752477)
Cod sursa(job #752477)
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int d[18][250010];
inline int nr(long n)
{
int nm = 0;
do{
n &= (n - 1);
++nm;
}while(n);
return nm;
}
inline int index(long n)
{
n = n | (n >> 1);
n = n | (n >> 2);
n = n | (n >> 4);
n = n | (n >> 8);
n = n | (n >> 16);
return nr(n) - 1;
}
int main()
{
int i, n, q, nod, pas, j;
in >> n >> q;
for(i = 1; i <= n; i++)
in >> d[0][i];
for(i = 1; (1 << i) <= n; ++i)
for(j = 1; j <= n; ++j)
d[i][j] = d[i - 1][ d[i - 1][j] ];
while(q--){
in >> nod >> pas;
for(i = pas; i && nod; i >>= 1)
if(pas & i)
nod = d[index(i)][nod];
out << nod << "\n";
}
return 0;
}