Cod sursa(job #1760410)
| Utilizator | Data | 20 septembrie 2016 19:19:21 | |
|---|---|---|---|
| Problema | Stramosi | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.65 kb |
#include <fstream>
using namespace std;
#define Nmax 250002
#define LogN 18
ifstream fin( "stramosi.in" );
ofstream fout( "stramosi.out" );
int D[LogN][Nmax];
int main(){
int N, M;
fin >> N >> M;
for( int i = 1; i <= N; ++i )
fin >> D[0][i];
for( int i = 1; ( 1<<i ) <= N; ++i )
for( int j = 1; j <= N; ++j )
D[i][j] = D[i-1][D[i-1][j]];
int Q, P;
while( M-- ){
fin >> Q >> P;
while(P){
int poz = 31 - __builtin_clz(P);
Q = D[poz][Q];
P ^= (1 << poz);
}
fout << Q << "\n";
}
return 0;
}
