Cod sursa(job #1960600)

Utilizator leraValeria lera Data 10 aprilie 2017 15:58:14
Problema Range minimum query Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m,k,rsp=999999999,x,y,rez,a[100005],v[105];
int main()
{
    const int dim=1000;
    fin>>n>>m;
    for(int i=1;i<=n;i++)fin>>a[i];
    for(int i=1;i<=n;i++)
    {
        rsp=min(rsp,a[i]);
        if(i%dim==0)
        {
            v[++k]=rsp;
            rsp=999999999;
        }
    }
    if(n%dim!=0)v[++k]=rsp;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y;
        rez=999999999;
        for(int j=x;j<=y;j++)
        {
            rez=min(rez,a[j]);
            if(j%dim==0)
            {
                if(j+dim<y)
                {
                    j+=dim;
                    rez=min(rez,v[j/dim]);
                }
            }
        }
        fout<<rez<<'\n';
    }
    return 0;
}