Cod sursa(job #1050637)

Utilizator Iustin_BulimarFMI Iustin Bulimar Iustin_Bulimar Data 8 decembrie 2013 21:09:46
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");

const int n_max=100001;
const int inf=100001;

int n, i, v[n_max], m[n_max], l, k, x, y, q;

int minim(int x, int y)
{
    int i, mini=inf, s=x/l, d=y/l;
    for(i=s+1; i<d; i++)
        if(mini>m[i]) mini=m[i];
    for(i=x; i/l==s; i++)
        if(v[i]<mini) mini=v[i];
    for(i=y; i/l==d; i--)
        if(v[i]<mini) mini=v[i];
    return mini;
}

int main()
{
    cin>>n>>q;
    l=sqrt(n);
    k=n/l;
    if(n%l) k++;
    for(i=0; i<k; i++) m[i]=inf;
    for(i=0; i<n; i++)
    {
        cin>>v[i];
        if(v[i]<m[i/l]) m[i/l]=v[i];
    }
    for(i=1; i<=q; i++)
    {
        cin>>x>>y;
        cout<<minim(x-1, y-1)<<'\n';
    }
    return 0;
}