Pagini recente » Cod sursa (job #1675869) | Cod sursa (job #2096479) | Cod sursa (job #1766536) | Cod sursa (job #2405725) | Cod sursa (job #2754734)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int mat_stramos[18][250003]; ///pastram stramosul de ordin 2^i al lui j
int stramos(int al_catelea_stramos, int pozitie)
{
int aux=pozitie; ///pastram pozitia
while(al_catelea_stramos)
{
int ct=0;
int put=1;
while(put*2<=al_catelea_stramos) ///cea mai mare putere a lui 2 mai mica decat numarul stramosului (pentru a cauta in vector)
{
ct++;
put*=2;
}
aux=mat_stramos[ct][aux]; ///actualizam valoarea
al_catelea_stramos=al_catelea_stramos-put; ///actualizam numarul stramosului ce trebuie cautat
}
int stramos_gasit=aux;
return stramos_gasit;
}
int main()
{
int n,m,p,q;
fin>>n>>m;
for(int i=1; i<=n; i++)
fin>>mat_stramos[0][i];
for(int i=1, put2=2; put2<=n; i++, put2*=2) ///generare matrice de stramosi
for(int j=1; j<=n; j++)
mat_stramos[i][j]=mat_stramos[i-1][mat_stramos[i-1][j]];
for(int i=1; i<=m; i++)
{
fin>>q>>p;
fout<<stramos(p,q)<<endl;
}
return 0;
}