Pagini recente » Cod sursa (job #3355290) | Cod sursa (job #340849) | Cod sursa (job #3351852) | Monitorul de evaluare | Cod sursa (job #3354561)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int rmq[18][250001];
int lg[250001];
void spares_table(int n) {
for (int i=1;(1<<i)<=n;i++) {
for (int j=1;j<=n-(1<<i);j++) {
if (rmq[i-1][j]==0) {
continue;
}
rmq[i][j]=rmq[i-1][rmq[i-1][j]];
}
}
}
int main(){
int n,q;
fin>>n>>q;
for (int i=1;i<=n;i++) {
fin>>rmq[0][i];
}
lg[1]=0;
for (int i=2;i<=n;i++) {
lg[i]=lg[i-1]/2+1;
}
spares_table(n);
for (int i=1;i<=q;i++) {
int start,pasi;
fin>>start>>pasi;
int poz=start,bit=0;
while ((1<<bit)<=pasi) {
if ((pasi>>bit)&1) {
poz=rmq[bit][poz];
}
bit++;
}
fout<<poz<<"\n";
}
return 0;
}