Cod sursa(job #1463315)

Utilizator akaprosAna Kapros akapros Data 20 iulie 2015 17:52:12
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define inf 100002
#define Rmax 318
using namespace std;
int n, i, j, m, x, y, q, r, w[Rmax], X, Y, v[inf];
int main()
{
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    scanf("%d %d", &n, &q);
    r = sqrt(n);
    for (i = 0; i <= r; ++ i)
        w[i] = inf;
    for (i = 0; i < n; ++ i)
    {
        scanf("%d", &v[i]);
        w[i / r] = min(w[i / r], v[i]);
    }
    while (q -- )
    {
        scanf("%d %d", &x, &y);
        -- x;
        -- y;
        int vmin = inf;
        int b = (x / r) + 1, e = y / r;
        for (i = b; i <= e; ++ i)
            vmin = min(vmin, w[i]);
        for (i = x; i < b * r; ++ i)
            vmin = min(vmin, v[i]);
        for (i = e * r + 1; i <= y; ++ i)
            vmin = min(vmin, v[i]);
        printf("%d\n", vmin);
    }
    return 0;
}