Pagini recente » Cod sursa (job #1033959) | Cod sursa (job #2341249) | Cod sursa (job #2628007) | Cod sursa (job #2640280) | Cod sursa (job #2977236)
#include <fstream>
#include <cmath>
const int NMAX=250005;
const int LGMAX=32;
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int dp[LGMAX][NMAX];
int p[NMAX];
int n, q;
void build();
int urca(int, int);
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
int i, a, b;
fin>>n>>q;
for(i=1; i<=n; i++) fin>>dp[0][i];
build();
while(q--)
{
fin>>a>>b;
fout<<urca(a, b)<<'\n';
}
return 0;
}
int urca(int nod, int pt)
{
if(pt==0) return nod;
return urca(dp[p[pt]][nod], pt-(1<<p[pt]));
}
void build()
{
int i, j, pt=0;
for(i=1; i<=n; i++)
{
if((1<<(pt+1))==i) pt++;
p[i]=pt;
}
for(i=1; (1<<i)<=n; i++)
{
for(j=1; j<=n; j++) dp[i][j]=dp[i-1][dp[i-1][j]];
}
}