Cod sursa(job #2752617)

Utilizator stefan.m.soare@gmail.comstefan soare [email protected] Data 18 mai 2021 18:49:37
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");


int const MAX=1e5+3;
int LOGA=17;
int a[MAX];
int mat[MAX][17];
int n,m;

int query(int L, int R)
{
    int lung=R-L+1;
    int k =1;

    while((1<<(k+1)) <= lung)
        ++k;

    return min(mat[L][k],mat[R-(1<<k)+1][k]);

}

int main() {

    fin>>n>>m;

    for(int i =1; i <= n; ++i)
    {
        fin>>a[i];
        mat[i][0]=a[i];
    }

    for(int i =1; i < LOGA; ++i)
        for(int j =1; j +(1 <<i) -1 <= n; ++j)
            mat[j][i]= min(mat[j][i-1],mat[j+(1<<(i-1))][i-1]);


    for(int j =1; j <= m; ++j)
    {
        int x,y;
        fin>>x>>y;

        fout<<query(x,y)<<"\n";
    }

    return 0;
}