Cod sursa(job #2240731)

Utilizator AvramDanielAvram Daniel AvramDaniel Data 13 septembrie 2018 21:59:04
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <bits/stdc++.h>
#define N 100010
using namespace std;

int n,m,a[N],rmq[N][17],lg[N],x,y,l,k;

int main()
{
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        rmq[i][0]=a[i];
        if(i) lg[i]=lg[i/2]+1;
    }

    for(int j=1;(1<<j)<n;j++)
    {
        for(int i=0;i<=n-(1<<j);i++)
            rmq[i][j]=min(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
    }
    for(;m;m--)
    {
        cin>>x>>y;
        x--;y--;
        l=y-x+1;

        k=lg[l]-1;
        cout<<min(rmq[x][k],rmq[y-(1<<(k))+1][k])<<'\n';
    }




    return 0;
}