Cod sursa(job #2353690)

Utilizator AvramDanielAvram Daniel AvramDaniel Data 24 februarie 2019 15:16:16
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <bits/stdc++.h>
#define N 100010
using namespace std;

int n,m,a[N],rmq[17][N],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];
        cout<<min(rmq[k][x], rmq[k][y-(1<<(k))+1])<<'\n';
    }


    return 0;
}