Pagini recente » Cod sursa (job #1097387) | Cod sursa (job #1146339) | Cod sursa (job #860741) | Cod sursa (job #1206153) | Cod sursa (job #811570)
Cod sursa(job #811570)
#include<fstream>
using namespace std;
int a[19][250001],lg[250001];
int n,m,i,l,p,q,nod,ord;
int stramos(int nod,int ord)
{
if(nod==0)return 0;
if(ord==0)return nod;
nod=a[lg[ord]][nod];
ord-=1<<lg[ord];
return stramos(nod,ord);
}
int main()//18=log(2,2500000),se cere stramosul de ordin ord al lui nod
{
ifstream f("stramosi.in");ofstream g("stramosi.out");
f>>n>>m;
for(i=1;i<=n;++i)
f>>a[0][i];
for(l=1;l<=18;l++)//lucreaza fix ca skip listurile,a[l][i] <- stramosul de ordin 2^l al lui i
for(i=1;i<=n;i++)
a[l][i]=a[l-1][ a[l-1][i] ];
for(i=2;i<=n;i++)lg[i]=lg[i/2]+1;
for(i=1;i<=m;i++)
{
f>>nod>>ord;
g<<stramos(nod,ord)<<'\n';
}
f.close();g.close();
return 0;
}