Pagini recente » Cod sursa (job #1718806) | Cod sursa (job #3152479) | Cod sursa (job #726236) | Cod sursa (job #648439) | Cod sursa (job #1520025)
#include <fstream>
using namespace std;
int n,m,ok,v[1005][250005],w[2][250003],a,b,i,j;
int fin(int p,int q)
{
if(v[0][q]>=p)
return v[p][q];
if(v[v[0][q]][q]==0) return 0;
if(v[v[0][q]][q]==v[1][q])
{
p=(p-1)%v[1][q]+1;
return fin(p,q);
}
p-=(v[0][q]-1);
return fin(p,v[v[0][q]][q]);
}
int main()
{
ifstream f("stramosi.in");
ofstream g("stramosi.out");
f>>n>>m;
for(i=1; i<=n; i++)
{
f>>v[1][i];
v[0][i]=1;
}
for(j=1; j<=n; j++)
{
for(i=1; i<=n; i++)
w[0][i]=w[0][0];
w[0][0]++;
ok=1;
i=1;
do{
i++;
v[i][j]=v[1][v[i-1][j]];
w[0][v[i][j]]++;
if(w[0][v[i][j]]>w[0][0]||v[i][j]==v[1][j]) ok=0;
else
{
w[1][v[i][j]]=i;
}
v[0][j]++;
}while(v[i][j]&&ok);
if(ok==0)
{
if(v[v[0][j]][j]!=v[1][j])
{
v[0][j]=w[1][v[v[0][j]][j]];
}
}
}
for(j=1; j<=m; j++)
{
f>>b>>a;
g<<fin(a,b)<<'\n';
}
f.close(); g.close();
}