Cod sursa(job #2543740)

Utilizator mihnea03Ciocioiu Mihnea mihnea03 Data 11 februarie 2020 14:40:55
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
#define dim 100010
using namespace std;
int d[30][dim];
int l[dim];
int i,j,n,m,st,dr,len,e;

int main() {
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    fin>>n>>m;
    l[1]=0;
    fin>>d[0][1];
    for (i=2;i<=n;i++) {
        l[i]=1+l[i/2];///l[i]=log i
        fin>>d[0][i];
    }
    for (e=1;e<=l[n];e++) {
        for (i=1;i<=n;i++) {
            d[e][i]=d[e-1][i];
            if (i+(1<<(e-1))<=n&&d[e-1][i+(1<<(e-1))]<d[e][i])
                d[e][i]=d[e-1][i+(1<<(e-1))];
        }
    }
    for (i=1;i<=m;i++) {
        fin>>st>>dr;
        len=dr-st+1;
        fout<<min(d[l[len]][st],d[l[len]][dr-(1<<(l[len]))+1])<<"\n";
    }
    return 0;
}