Cod sursa(job #2484217)

Utilizator AlexandruPaulSirbu Alex AlexandruPaul Data 30 octombrie 2019 19:21:11
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
#include<cmath>
using namespace std;

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

const int Maxx=1e5+1;
const int PMaxx=18;
int n,m;
int A[Maxx];
int sparseTable[Maxx][PMaxx];

void build_sparseTable(){
    int i,j;
    for(i=1; i<=n; ++i){
        sparseTable[i][0] = A[i];
    }
    for (j=1; (1<<j)<=n; ++j){
        for (i=1; i+(1<<j)-1<=n; ++i){
            sparseTable[i][j] = min(sparseTable[i][j-1],sparseTable[i+(1<<(j-1))][j-1]);
        }
    }
}
int query(int left, int right){
    int lp = log2(right-left+1);
    return min(sparseTable[left][lp],sparseTable[right-(1<<lp)+1][lp]);
}

int main() {
    fin>>n>>m;
    int i;
    for (i=1; i<=n; ++i){
        fin>>A[i];
    }
    build_sparseTable();
    int x,y;
    for (i=1; i<=m; ++i){
        fin>>x>>y;
        fout<<query(x,y)<<"\n";
    }
    return 0;
}