Cod sursa(job #3350178)

Utilizator Commander_XDunel Stefan-Octavian Commander_X Data 6 aprilie 2026 09:19:39
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <vector>

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

using namespace std;

vector<vector<int>> RMQ;
vector<int> E;
int N,Q;

int findT(int nod,int len)
{
    if(nod == 0 || len == 0)
        return nod;
    return findT(RMQ[E[len]][nod],len - (1 << E[len]));
}
int main()
{
    ios::sync_with_stdio(false);
    fin.tie(0);

    fin >> N >> Q;

    RMQ.resize(18,vector<int>(N+1));
    E.resize(N+1,0);

    for(int i = 1; i <= N; ++i)
        fin >> RMQ[0][i];

    for(int i = 2; i <= N; ++i)
        E[i] = 1 + E[i/2];

    for(int p = 1; p <= 17; ++p)
        for(int i = 1; i <= N; ++i)
            RMQ[p][i] = RMQ[p-1][RMQ[p-1][i]];

    int nod, len;
    while(Q--)
    {
        fin >> nod >> len;
        fout << findT(nod,len) << '\n';
    }
}