Cod sursa(job #1897109)

Utilizator mihaihernestHernest Mihai mihaihernest Data 1 martie 2017 10:08:41
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int b[20][100005],a[100005],n,m,p,i,j,t,r,q,s,l,i1,n1,x,y,nr;
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>a[i];
        b[0][i]=a[i];
    }
    p=1;
    s=0;
    while(p<=n)
        p=p*2,s++;
    s--;
    i=1;
    t=1;
    j=n-t;
    l=1;
    while(j>0)
    {
        j=n-t;
        r=1;
        for(q=1;q<=l-1;q++)
            r=r*2;
        for(i1=1;i1<=n;i1++)
        b[l][i1]=min(b[l-1][i1],b[l-1][i1+r]);
        t=t*2;
        l++;
    }
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        p=y-x+1;
        t=1;
        nr=0;
        while(t<=p)
            t=t*2,nr++;
        nr--;
        n1=1;
        for(j=1;j<=nr;j++)
            n1*=2;
            n1--;
        g<<min(b[nr][x],b[nr][y-n1])<<"\n";
    }

    return 0;
}