Pagini recente » Cod sursa (job #233093) | Cod sursa (job #2026701) | Cod sursa (job #540627) | Cod sursa (job #604168) | Cod sursa (job #3232357)
#include<iostream>
#include<fstream>
using namespace std;
int v[19][250005];
int main(){
int n,m,q,i,j,p, putere, exponent;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
f>>n>>m;
//citire
for(i=1;i<=n;++i) f>>v[0][i];
//calculare puterea maxima a lui 2 pt care 2^exp <=n
exponent = 0;
putere =1;
while(putere<=n){
putere = putere*2;
++exponent;
}
//
//completez sparse table cu stramosii de nivel j pt fiecare
for (j=1;j<exponent; ++j) {
for (i=1;i<=n; ++i) {
if (v[j-1][i] != 0) {
v[j][i] = v[j-1][ v[j-1][i] ];
} else {
v[j][i] = 0;
}
}
}
for(i=0;i<m;i++){
f>>q>>p;
for(j=exponent-1;j>=0;j--){
if(p & (1<<i) )
q = v[i][q];
}
g<<q<<endl;
}
return 0;
}