Cod sursa(job #2898182)

Utilizator TudorBordeaBordea Tudor TudorBordea Data 6 mai 2022 11:47:52
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>

using namespace std;

const int N=1e5;
const int L=16;

int r[L+1][N+1], log[N+1];

int minim(int st, int dr)
{
    int l=log[dr-st+1];
    int p=(1<<l);
    return min(r[l][st+p-1],r[l][dr]);
}

int main()
{
    ifstream in("rmq.in");
    ofstream out("rmq.out");
    int n,q;
    in>>n>>q;
    for(int j=1;j<=n;j++)
    {
        in>>r[0][j];
    }
    for(int i=1;(1<<i)<=n;i++)
        for(int j=(1<<i);j<=n;j++)
        {
            int p=(1<<(i-1));
            r[i][j]=min(r[i-1][j-p],r[i-1][j]);
        }
    log[1]=0;
    for(int j=2;j<=n;j++)
        log[j]=1+log[j/2];
    for(int i=0;i<q;i++)
    {
        int st,dr;
        in>>st>>dr;
        out<<minim(st,dr)<<"\n";
    }
    return 0;
}