Cod sursa(job #790031)

Utilizator andrei.sfrentSfrent Andrei andrei.sfrent Data 20 septembrie 2012 01:20:28
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.48 kb
#include <cstdio>
#define s scanf
int log2(int x) {
return x==1?0:1+log2(x>>1);}
int N,M,S[250002],p,q,u,mem[33][250002];
int main(){
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
s("%d%d\n",&N,&M);
for(int i=1;i<=N;i++)
s("%d",S+i);
for(int i=1;i<=N;i++)
mem[0][i]=S[i];
for(int j=1;j<log2(M)+1;j++)
for(int i=1;i<=N;i++)
mem[j][i]=mem[j-1][mem[j-1][i]];
while(M--){
s("%d%d",&q,&p);
while(u=(p&(p-1)))q=mem[log2(p-u)][q],p=u;
printf("%d\n",mem[log2(p)][q]);}
return 0;}