Pagini recente » Cod sursa (job #402359) | Cod sursa (job #1697394) | Cod sursa (job #1798226) | Cod sursa (job #3160188) | Cod sursa (job #2977233)
#include <fstream>
#include <cmath>
#pragma GCC optimize("O3")
#pragma GCC optimize("fast-math")
#pragma GCC optimize("unroll-loops")
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]];
}
}