Cod sursa(job #1326805)

Utilizator japjappedulapPotra Vlad japjappedulap Data 25 ianuarie 2015 23:47:38
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>
using namespace std;

ifstream is ("rmq.in");
ofstream os ("rmq.out");

int N, Q;
int R[20][100001], Log[100001];

int main()
{
    is >> N >> Q;
    for (int i = 2; i <= N; ++i)
        Log[i] = Log[i/2]+1;

    for (int i = 1; i <= N; ++i)
        is >> R[0][i];

    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))]);

    for (int i = 1, L, a, b; i <= Q; ++i)
    {
        is >> a >> b;
        if (a > b) swap(a, b);
        L = Log[b - a + 1];
        os << min(R[L][a], R[L][b - (1 << L) + 1]) << '\n';
    }

    is.close();
    os.close();
}