Pagini recente » Cod sursa (job #166005) | Cod sursa (job #734748) | Cod sursa (job #1737972) | Cod sursa (job #566479) | Cod sursa (job #1786685)
#include <stdio.h>
#include <ctype.h>
#define MAX_N 250000
#define LIM 1<<7
using namespace std;
int v[MAX_N+2][19];
FILE *fi, *fo;
int poz=LIM, poz2=0;
char BUF[LIM], BUF2[LIM];
inline char getChar(){
poz++;
if(poz>=LIM){
fread(BUF,LIM,1,fi);
poz=0;
}
return BUF[poz];
}
inline int getNr(){
int r=0, semn=1;
char ch=getChar();
while(isdigit(ch)==0 && ch!='-') ch=getChar();
if(ch=='-'){
semn=-1;
ch=getChar();
}
while(isdigit(ch)!=0){
r=r*10+semn*(ch-'0');
ch=getChar();
}
return r;
}
inline void putch(char ch){
BUF2[poz2++]=ch;
if(poz2==LIM){
fwrite(BUF2,LIM,1,fo);
poz2=0;
}
}
inline void baga(int x){
char s[15];
int k=0;
if(x<0){
putch('0');
return;
}
do{
s[k++]=x%10+'0';
x/=10;
}while(x);
while(k>0){
k--;
putch(s[k]);
}
}
int main()
{
int n, m, i, j, pe, a, nr, p;
fi=fopen("stramosi.in", "r");
fo=fopen("stramosi.out", "w");
n=getNr();
m=getNr();
for(i=1;i<=n;i++)
v[i][0]=getNr();
for(i=1;i<=n;i++){
pe=1;
a=i;
j=0;
do{
j++;
a=v[a][0];
if(j==1<<pe){
v[i][pe]=a;
pe++;
}
}while(a!=0);
}
for(j=0;j<m;j++){
a=getNr();
nr=getNr();
pe=0;
p=1;
while(p<=nr){
p*=2;
pe++;
}
for(pe--;pe>=0;pe--)
if(1<<pe<=nr){
a=v[a][pe];
nr-=(1<<pe);
}
baga(a);
putch('\n');
}
if(poz2>0)
fwrite(BUF2,poz2,1,fo);
fclose(fi);
fclose(fo);
return 0;
}