Cod sursa(job #3259493)

Utilizator TeodorVTeodorV TeodorV Data 26 noiembrie 2024 16:18:10
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

const int Nmax=250001;
int stramos[(int)floor(log2(Nmax))+2][Nmax];///s[i][j]= al 2^i stramos al lui j

int n;
void initStramosi()
{
    for(int i=1; i<=n; i++)
        fin>>stramos[0][i];
    int maxStramos=(int)floor(log2(n));
    for(int i=1; i<=maxStramos; i++)
    {
        for(int j=1; j<=n; j++)
        {
            stramos[i][j]=stramos[i-1][stramos[i-1][j]];
        }
    }
}

int getStramos(int p, int q)
{
    int pas2=1;
    while((1<<pas2)<=p)
        pas2++;
    pas2--;

    int rez=stramos[pas2][q];
    pas2--;

    while(pas2>=0)
    {
        if((1<<pas2)&p)
            rez=stramos[pas2][rez];
        pas2--;
    }
    return rez;
}

int main()
{
    int m;
    fin>>n>>m;
    initStramosi();
    int x,y;
    for(int q=1; q<=m; q++)
    {
        fin>>x>>y;
        fout<<getStramos(y, x)<<'\n';
    }
    return 0;
}