Cod sursa(job #1785629)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 21 octombrie 2016 18:24:57
Problema Range minimum query Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 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 piece, length = sqrt(n);
    for (int i = 1; i <= n; ++i)
    {
        piece = (i - 1)/length;
        if(A_MIN[piece] == 0)
            A_MIN[piece] = A[i];
        else
            A_MIN[piece] = min(A_MIN[piece], 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 - 2 <= 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;
}