Cod sursa(job #1349301)

Utilizator EpictetStamatin Cristian Epictet Data 20 februarie 2015 08:43:22
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int N, M, x, y, dif, l, lg[100010], V[20][100010];

int main()
{
    fin >> N >> M;
    lg[0] = -1;
    for (int j = 1; j <= N; j++)
    {
        fin >> 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]);
            //fout << V[i][j] << ' ';
        }
        //fout << '\n';
    }

    for (int i = 1; i <= M; i++)
    {
        fin >> x >> y;
        dif = y - x + 1;
        l = lg[dif];
        fout << min(V[l][x], V[l][y-(1 << l)+1]) << '\n';
    }

    fout.close();
    return 0;
}