Cod sursa(job #1785645)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 21 octombrie 2016 18:58:34
Problema Range minimum query Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
#define NMAX 100001
#define SMAX 317

using namespace std;

ifstream in("rmq.in");
ofstream out("rmq.out");
int A[NMAX], n, m;
int A_MIN[SMAX];

int main()
{
    in >> n >> m;
    for (int i = 1; i <= n; ++i)
        in >> A[i];
    int length = sqrt(n);
    int L = length;
    if((double) L < sqrt(n))
        L++;
    for (int i = 0; i < L; ++i)
        A_MIN[i] = NMAX;
    for (int i = 1; i <= n; ++i)
        A_MIN[(i - 1) / length] = min(A_MIN[(i - 1) / length], A[i]);
    int x, y, minn;
    for (int i = 1; i <= m; ++i)
    {
        in >> x >> y;
        minn = A[x];
        for (int j = x; j <= y; j++)
        {
            if ((j - 1) % length == 0 && j + length - 1 <= y)
            {
                minn = min(minn, A_MIN[(j - 1)/length]);
                j += (length - 1);
            }
            else
                minn = min(minn, A[j]);
        }
       out << minn << "\n";
    }
    in.close();
    out.close();
    return 0;
}