Cod sursa(job #2480569)

Utilizator Alex_DiaconuDiaconu Alexandru Alex_Diaconu Data 25 octombrie 2019 19:59:30
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

using namespace std;

const int N = 100001;
const int L = 17;

ifstream ci ("rmq.in");
ofstream co ("rmq.out");

int r[L][N];
int log[N];

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

int main()
{
    int n, m;
    ci >> n >> m;
    for (int j = 1; j <= n; j++)
    {
        ci >> r[0][j];
    }
    for (int i = 1; (1 << i) <= n; i++)
    {
        for (int j = 1; j + (1 << i) - 1 <= n; j++)
        {
            r[i][j] = min(r[i-1][j], r[i-1][j + (1 << (i-1))]);
        }
    }
    log[1]=0;
    for (int i=2; i<=n; i++)
    {
        log[i]=log[i/2]+1;
    }
    int a, b;
    for (int i = 1; i <= m; i++)
    {
        ci >> a >> b;
        co << query(a,b) << endl;
    }
    return 0;
}