Cod sursa(job #2503465)

Utilizator poparobertpoparobert poparobert Data 3 decembrie 2019 10:34:25
Problema Range minimum query Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n,m,x=2,aux,p,y,rez;
vector<int> rmq[20];
int main()
{
    cin>>n>>m;
    rmq[0].push_back(0);
    for(int i=1;i<=n;i++)
    {
        cin>>aux;
        rmq[0].push_back(aux);
    }
    while(x<=n)
    {
        p++;
        rmq[p].push_back(0);
        for(int i=1;i+x-1<=n;i++)
        {
            rmq[p].push_back(min(rmq[p-1][i],rmq[p-1][i+x/2]));
        }
        x*=2;
    }
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y;
        rez=rmq[0][x];
        y-=x;
        aux=1;
        p=0;
        while(y)
        {
            if(y%2==1)
            {
                rez=min(rez,rmq[p][x+1]);
                x+=aux;
            }
            p++;
            y/=2;
            aux*=2;
        }
        cout<<rez<<'\n';
    }
    return 0;
}