Cod sursa(job #1534639)

Utilizator BaweeLazar Vlad Bawee Data 23 noiembrie 2015 20:58:05
Problema Range minimum query Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int A[100001],M[100001];

int main()
{
    int x,y,N,K,i,j,minn = 1 << 30,right,left;

    f >> N >> K;

    int rad = sqrt(N);

    for(i = 1; i <= N; i++) f >> A[i];

    for(i = 1; rad * i <= N; i++)
    {
        M[i] = 1 << 30;
        for(j = rad * (i - 1) + 1; j <= rad * i; j++)
            M[i] = min(M[i],A[j]);
    }

    for(i = 1; i <= K; i++)
    {
        f >> x >> y;

        minn = 1 << 30;

        for(j = 1; rad * j < x; j++);
        j++;
        left = min(rad * (j - 1), y);
        for (;rad * j <= y; j++)
            minn = min(minn, M[j]);
        right = max(rad * (j - 1), x);

        for(j = x; j <= left; j++)
            minn = min(minn, A[j]);
        for(j = right; j <= y; j++)
            minn = min(minn, A[j]);

        g << minn << "\n";

    }

    return 0;
}