Cod sursa(job #2786962)

Utilizator mateitudordmDumitru Matei mateitudordm Data 22 octombrie 2021 09:36:59
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;

int v[250001];
int str[18][250001],n,i,j;

int lsb(int x){return (x&(-x));}
int nrlsb(int x){return log2(lsb(x));}
void pre()
{
    for(i=1; i<=n; i++)
        str[0][i]=v[i];
    for(i=1; (1<<i)<n; i++)
        for(j=1; j<=n; j++)
            str[i][j]=str[i-1][str[i-1][j]];
}
int query(int x,int k)
{
    while(k>0)
    {
        x=str[nrlsb(k)][x];
        k-=lsb(k);
    }
    return x;
}

int main()
{
    ifstream cin("stramosi.in");
    ofstream cout("stramosi.out");
    int k,a,b;
    cin>>n>>k;
    for(i=1; i<=n; i++)
        cin>>v[i];
    pre();
    for(i=1; i<=k; i++)
    {
        cin>>a>>b;
        cout<<query(a,b)<<'\n';
    }
    return 0;
}