Cod sursa(job #1919476)

Utilizator Harsan_SabinHarsan Sabin Harsan_Sabin Data 9 martie 2017 19:40:38
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

int n,m,v[100011],spt[100005][18],l,r,k;

int main()
{
    cin>>n>>m;

    for(int i=1;i<=n;++i)
    {
        cin>>v[i];
        spt[i][0]=v[i];
    }

    for(int j=1;(1<<j)<=n;++j)
        for(int i=0;i+(1<<j)-1<=n;++i)
            if(spt[i][j-1]<=spt[i+(1<<(j-1))][j-1])
                spt[i][j]=spt[i][j-1];
            else
                spt[i][j]=spt[i+(1<<(j-1))][j-1];

    for(int i=1;i<=m;++i)
    {
        cin>>l>>r;
        k=(int)log2(r-l+1);

        if(spt[l][k]<spt[r-(int)pow(2,k)+1][k])
            cout<<spt[l][k]<<'\n';
        else
            cout<<spt[r-(int)pow(2,k)+1][k]<<'\n';
    }
    return 0;
}