Cod sursa(job #2512171)

Utilizator mitza23Mihai Grebla mitza23 Data 20 decembrie 2019 17:33:29
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#define ZERO 1000000000
using namespace std;


ifstream fi("rmq.in");
ofstream fo("rmq.out");

int n,q,k,arr[100005], table[100005][20];


int querry(int l, int r)
{
    int rez=ZERO;
    for(int i=k;i>=0;i--)
    {
        if(l+(1<<i)-1<=r)
        {
            rez=min(rez,table[l][i]);
            l=l+(1<<i);
        }
    }
    return rez;
}


int main()
{
   fi>>n>>q;
   for(int i=0;i<n;i++)
    fi>>arr[i];

   for(int i=0;i<n;i++)
    table[i][0]=arr[i];
    k=0;
    for(int j=1; (1<<j) <=n;j++)
    {
        k++;
        for(int i=0;i+(1<<j)<=n;i++)
            table[i][j]=min(table[i][j-1], table[i+(1<<j-1)][j-1]);
    }

    int l,r;
    for(int i=0;i<q;i++)
    {
        fi>>l>>r;
        fo<<querry(l-1,r-1)<<'\n';
    }

    fi.close();
    fo.close();
    return 0;
}