Cod sursa(job #2109946)

Utilizator trifangrobertRobert Trifan trifangrobert Data 20 ianuarie 2018 11:39:41
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

using namespace std;

const int DIM = 100010;
int n, m, p;
int lg[DIM];
int rmq[DIM][20];

int main()
{
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    fin >> n >> m;
    lg[1] = 0;
    for (int i = 1;i <= n;++i)
    {
        fin >> rmq[i][0];
        if (i != 1)
            lg[i] = lg[i >> 1] + 1;
    }
    for (int p = 1;(1 << p) <= n;++p)
        for (int j = 1;j + (1 << p) - 1 <= n;++j)
            rmq[j][p] = min(rmq[j][p - 1], rmq[j + (1 << (p - 1))][p - 1]);
    int x, y, p;
    for (int i = 1;i <= m;++i)
    {
        fin >> x >> y;
        p = lg[y - x + 1];
        fout << min(rmq[x][p], rmq[y - (1 << p) + 1][p]) << "\n";
    }
    fin.close();
    fout.close();
    return 0;
}