Cod sursa(job #2279187)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 9 noiembrie 2018 06:57:11
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <cstdio>

using namespace std;

const int N=100000+5;

int v[N][19];
int lol[N];

int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<19;j++)
        {
            v[i][j]=(1<<30);
        }
    }
    int n,t;
    cin>>n>>t;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i][0];
    }
    for(int k=1;k<19;k++)
    {
        for(int i=1;i+(1<<k)-1<=n;i++)
        {
            v[i][k]=min(v[i][k-1],v[i+(1<<(k-1))][k-1]);
        }
    }
    for(int i=2;i<N;i++)
    {
        lol[i]=lol[i/2]+1;
    }
    for(int tc=1;tc<=t;tc++)
    {
        int st,dr;
        cin>>st>>dr;
        int lg=lol[dr-st+1];
        cout<<min(v[st][lg],v[dr-(1<<lg)+1][lg])<<"\n";
    }
    return 0;
}