Cod sursa(job #1367130)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 1 martie 2015 17:07:32
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int N, M, x, y, dif, l, lg[100010], V[20][100010];
int main()
{
    f >> N >> M;
    lg[0] = -1;
    for (int j = 1; j <= N; j++)
    {
        f>> V[0][j];
        lg[j] = lg[j / 2] + 1;
    }
    for (int i = 1; (1 << i) <= N; i++)
    {
        for (int j = 1; j <= N - (1 << i) + 1; j++)
        {
            int l = (1 << (i - 1));
            V[i][j] = min(V[i-1][j], V[i-1][j+l]);
        }
    }
    for (int i = 1; i <= M; i++)
    {
        f >> x >> y;
        dif = y - x + 1;
        l = lg[dif];
        g << min(V[l][x], V[l][y-(1 << l)+1]) << '\n';
    }
    g.close();return 0;
}