Pagini recente » Cod sursa (job #2814123) | Cod sursa (job #858057) | Cod sursa (job #614527) | Cod sursa (job #320409) | Cod sursa (job #616674)
Cod sursa(job #616674)
#include<stdio.h>
#include<fstream>
#define maxn 250010
#include<stack>
using namespace std;
int tati[maxn];
stack<int> stiva;
char s[1<<25];
int n,m,spct;
inline int next()
{
int ret=0;
while ( s[spct] && (s[spct]<'0' || s[spct]>'9')) ++spct;
while ( s[spct]>='0' && s[spct]<='9' )
ret= ret*10+ s[spct]-'0',++spct;
return ret;
}
inline void nextline(){
fgets( s , 1<<25 ,stdin);spct=0;
}
int main()
{
freopen ("stramosi.in","r",stdin);
freopen ("stramosi.out","w",stdout);
int a,b,cnt,nod,val,x;
scanf("%d %d\n",&n,&m);
fgets(s,1<<25,stdin);
for(int i=1;i<=n;i++)
{
x=next();
tati[i]=x;
}
for(int i=1;i<=m;i++)
{
scanf("%d %d",&nod,&val);
cnt=0;
stiva.push(nod);
while(1!=0)
{
nod=stiva.top();
stiva.pop();
if(cnt==val) {printf("%d\n",nod);break;}
else
{
cnt++;
if(tati[nod]==0) {printf("0\n");break;}
else {stiva.push(tati[nod]);}
}
}
//dfs(a,0,b);
}
}