Cod sursa(job #1897649)

Utilizator dumitrescugeorgeGeorge Dumitrescu dumitrescugeorge Data 1 martie 2017 16:55:10
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int r[100020][20],n,nr,i1,o1;
int min1(int a,int b)
{
    if(a<b)
        return a;
    else
        return b;
}
void proces()
{
    int l=ceil(log2(n));

    for(int j=1;j<l;j++)
    {
        for(int i=0;i<n;i++)
        {
            if(i+(1<<(j-1))<n)
                r[i][j]=min1(r[i][j-1],r[i+(1<<(j-1))][j-1]);
            else
                r[i][j]=r[i][j-1];
        }
    }
}
void afisare()
{
   int l1=ceil(log2(o1-i1));
   if(o1-(1<<l1)+1>=0)
    printf("%d\n",min1(r[i1][l1],r[o1-(1<<l1)+1][l1]));
    else
        printf("%d\n",r[i1][l1]);
}
void citire()
{
    scanf("%d %d",&n,&nr);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&r[i][0]);
    }
    proces();
    for(int i=0;i<nr;i++)
        {
            scanf("%d %d",&i1,&o1);
            i1--;
            o1--;
            afisare();
        }
}
int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    citire();
    //cout << "Hello world!" << endl;
    return 0;
}