Pagini recente » Cod sursa (job #1915522) | Cod sursa (job #2337318) | Cod sursa (job #315200) | Cod sursa (job #1264012) | Cod sursa (job #312485)
Cod sursa(job #312485)
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
#define MAXP 18
int n,m;
int q,p;
int stram[250001][MAXP];
int pows[MAXP];
#define BUFFSIZE 1024
char bufferin[BUFFSIZE];
char bufferout[BUFFSIZE];
int main() {
//time_t tStart,tEnd;//<--
//time(&tStart);
FILE *fin;
//fin.rdbuf()->pubsetbuf(bufferin,BUFFSIZE);
fin = fopen("stramosi.in","rt");
FILE *fout;
//fout.rdbuf()->pubsetbuf(bufferout,BUFFSIZE);
fout = fopen("stramosi.out","wt");
fscanf(fin,"%d%d",&n,&m);
pows[0]=1;
for (int i=1;i<MAXP;i++)
pows[i]=pows[i-1]*2;
for (int i=1;i<=n;i++)
fscanf(fin,"%d",&stram[i][0]);
stram[0][0]=0;
for (int i=1;i<MAXP;i++) {
for (int j=0;j<=n;j++) {
stram[j][i]=stram[stram[j][i-1]][i-1];
}
}
for (int i=0;i<m;i++) {
fscanf(fin,"%d%d",&q,&p);
for (int pi = MAXP -1;pi>=0;pi--) {
if (p>=pows[pi]) {
p-=pows[pi];
q=stram[q][pi];
}
}
fprintf(fout,"%d\n",q);
}
fclose(fin);
fclose(fout);
//time(&tEnd);
//cout<<"Number of seconds elapsed:"<<difftime(tEnd,tStart)<<endl;
return 0;
}