Cod sursa(job #1667564)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 29 martie 2016 00:39:39
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>
#define oo (1<<30)

using namespace std;

ifstream in("rmq.in");
ofstream out("rmq.out");
const int NMAX = 100001;
int n,m;
int a[NMAX];
int M[NMAX];

int main()
{
    in>>n>>m;
    int rad = 1;
    for(rad = 1;rad*rad<n;rad++);
    rad--;
    a[0] = oo;
    for(int i=1;i<=n;i++)
        {
            in>>a[i];
            if(a[M[(i-1)/rad]] > a[i])
                M[(i-1)/rad] = i;
        }
    int x,y;
    int minn;
    for(int i=1;i<=m;i++)
    {
        in>>x>>y;
        minn = a[x++];
        while(x<=y)
        {
            if(x%rad==1)
            {
                minn = min(minn,a[M[(x-1)/rad]]);
                x+=rad;
            }
            else
                minn = min(minn,a[x++]);
        }
        out<<minn<<"\n";
    }
    in.close();
    out.close();
    return 0;
}