Cod sursa(job #2464552)

Utilizator st_marianStoica Marian st_marian Data 28 septembrie 2019 16:05:17
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
#define cin fin
#define cout fout
#define LMAX 20
#define NMAX 100005

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

int n, m;
int x, y;
int v[NMAX];
int rmq[LMAX][NMAX];

void read();
void build();
int main()
{
    read();

    return 0;
}
void read()
{
    cin>>n>>m;
    for(int i=1; i<=n; ++i)
        cin>>v[i];

    build();

    for(int i=1; i<=m; ++i)
    {
        cin>>x>>y;
        int dif=y-x+1;
        int nr=log2(dif);
        int limita=dif-(1<<nr);

        cout<<min(rmq[nr][x], rmq[nr][x+limita])<<'\n';
    }
}
void build()
{
    for(int i=1; i<=n; ++i)
        rmq[0][i]=v[i];
    for(int i=1; (1<<i)<=n; ++i)
        for(int j=1; (1<<i)+j-1<=n; ++j)
            rmq[i][j]=min(rmq[i-1][j], rmq[i-1][j+(1<<(i-1))]);
    }