Cod sursa(job #1054997)

Utilizator dumitrualexAlex Dumitru dumitrualex Data 14 decembrie 2013 10:40:04
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#include <algorithm>
#define nmax 100000+5
using namespace std;

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

int R[20][nmax];
int v[nmax];
int n;

void formareMatrice()
{
    int i, j;
    for (j = 1; j <= n; j++)
        R[0][j] = v[j];
    for (i = 1; (1 << i) <= n; i++)
        for (j = 1; j + (1 << i) - 1 <= n; j++)
            R[i][j] = min(R[i-1][j], R[i-1][j+(1<<(i-1))]);
}

int interogare(int x, int y)
{
    int log = 0;
    while ((1 << (log+1))<=y-x)
        log++;
    return min(R[log][x], R[log][y-(1<<log)+1]);
}

int main()
{
    int i;
    int m;
    int x, y;
    fin >> n >> m;
    for (i = 1; i <= n; i++)
        fin >> v[i];
    formareMatrice();

    for (i = 1; i <= m; i++)
    {
        fin >> x >> y;
        fout << interogare(x, y) << '\n';
    }
    return 0;

}