Cod sursa(job #2353582)

Utilizator AvramDanielAvram Daniel AvramDaniel Data 24 februarie 2019 13:15:36
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 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;
    //lg[0]=-1;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        rmq[0][i] = a[i];
        if(i) lg[i] = lg[i/2]+1;
    }

    for(int i=1;(1<<i)<n;i++)
        for(int j=0;j+(1<<i)-1<n;j++)
            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1<<(i-1))]);


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


    return 0;
}