Cod sursa(job #2232827)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 21 august 2018 12:26:48
Problema Range minimum query Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <vector>
 #define NMAX 100002
#define INF 0x3f3f3f3f
using namespace std;
 ifstream fin("rmq.in");
 ofstream fout("rmq.out");


long int a[NMAX],sq[NMAX];
long int rt;
long int n,m;

int main()
{


    long int i,j,x,y,ls,ld;

    fin>>n>>m;
    for (i=1;i<=n;i++)
       fin>>a[i];

    for (rt=0;rt*rt<=n;rt++);
    rt--;

    for (i=1;rt*i<=n;i++)
        {
        sq[i]=INF;
        for (j=rt*(i-1)+1;j<=rt*i;j++)
            sq[i]=min(sq[i],a[j]);
        }

    for (i=1;i<=m;i++)
    {
        long int mn;
        mn=INF;
        fin>>x>>y;
        for (j=1;rt*j<x;j++);
        j++;
        ls=min(rt*(j-1),y);
        for (;rt*j<=y;j++)
            mn=min(mn,sq[j]);
        ld=max(rt*(j-1),x);

        for (j=x;j<=ls;j++)
            mn=min(mn,a[j]);
        for (j=ld;j<=y;j++)
            mn=min(mn,a[j]);
       fout<<mn<<'\n';
    }
    return 0;
}