Cod sursa(job #3354561)

Utilizator RaresPanuPanu Rares RaresPanu Data 18 mai 2026 22:06:41
Problema Stramosi Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <iostream>

using namespace std;

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

int rmq[18][250001];
int lg[250001];

void spares_table(int n) {
    for (int i=1;(1<<i)<=n;i++) {
        for (int j=1;j<=n-(1<<i);j++) {
            if (rmq[i-1][j]==0) {
                continue;
            }
            rmq[i][j]=rmq[i-1][rmq[i-1][j]];
        }
    }
}

int main(){
    int n,q;
    fin>>n>>q;
    for (int i=1;i<=n;i++) {
        fin>>rmq[0][i];
    }
    lg[1]=0;
    for (int i=2;i<=n;i++) {
        lg[i]=lg[i-1]/2+1;
    }
    spares_table(n);
    for (int i=1;i<=q;i++) {
        int start,pasi;
        fin>>start>>pasi;
        int poz=start,bit=0;
        while ((1<<bit)<=pasi) {
            if ((pasi>>bit)&1) {
                poz=rmq[bit][poz];
            }
            bit++;
        }
        fout<<poz<<"\n";
    }
    return 0;
}