Cod sursa(job #751179)

Utilizator felixiPuscasu Felix felixi Data 24 mai 2012 19:21:48
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#include <string.h>
#define logN 19
#define maxN 250005
#define maxbuff 262144

int dp[logN][maxN];
char buff[maxbuff];
bool notread=true;
int idx;
 
inline void read(int &val)
{
val=0;

if(notread==true)
{
notread=false;
fread(buff,1,maxbuff,stdin);
idx=0;
}

for(;'0'<=buff[idx]&&buff[idx]<='9';)
{
val*=10;
val+=buff[idx]-'0';
if(++idx==maxbuff)
{
idx=0;
fread(buff,1,maxbuff,stdin);
}
}
for(;'0'>buff[idx]||buff[idx]>'9';)
if(++idx==maxbuff)
{
idx=0;
fread(buff,1,maxbuff,stdin);
}
}
 
int main()
{
int M,N;
 

memset(dp,0,sizeof(dp));
 
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
 
read(N);
read(M);
for(int i=1;i<=N;++i) read(dp[0][i]);
 
for(int i=1;i<logN;++i)
for(int j=1;j<=N;++j)
dp[i][j]=dp[i-1][dp[i-1][j]];
 
int P,Q,b;
for(int i=1;i<=M;++i)
{
read(Q);
read(P);

b=0;
while(P)
{
if(P&1) Q=dp[b][Q];
if(!Q) break;
++b;
P>>=1;
}
 
printf("%d\n",Q);
}
 
return 0;
}