Cod sursa(job #2164735)

Utilizator alexandruilieAlex Ilie alexandruilie Data 13 martie 2018 09:30:56
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#define nmax 100001
#define inf 2e9
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m1,v[nmax],i,m[nmax][20],l,lg,mn,nr,j,x,y;
int main()
{
    f>>n>>m1;
    for(i=1;i<=n;i++) f>>v[i];
    for(i=1;i<=n;i++) m[i][0]=i;
    for(j=1;1<<j<=n;j++)
        for(i=1;i+1<<j-1<=n;i++)
        if(v[m[i][j-1]]<v[m[i+1<<(j-1)][j-1]]) m[i][j]=m[i][j-1];
        else m[i][j]=m[i+1<<(j-1)][j-1];
    for(i=1;i<=m1;i++)
    {
        f>>x>>y;
        mn=inf;nr=0;
        lg=y-x+1;
        while(lg)
        {
            if(lg%2==1) {mn=min(mn,v[m[x][nr]]);x+=1<<nr;}
            nr++;
            lg/=2;
        }
        g<<mn<<'\n';
    }
    return 0;
}