Cod sursa(job #2788096)

Utilizator RaresPoinaruPoinaru-Rares-Aurel RaresPoinaru Data 24 octombrie 2021 22:08:26
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");

const int NMAX=100001;
const int QMAX=1000001;
const int POW=32;

int n,q,v[NMAX],rmq[QMAX][POW];

int main()
{
    fin >>n>>q;

    for (int i=1;i<=n;++i){
        fin >>rmq[i][0];
    }

    for (int j=1;j<=log2 (n);++j){
        for (int i=1;i<=n;++i){
            int a,b;
            a=rmq[i][j-1];
            b=rmq[min (i+int (pow(2,j-1)),n)][j-1];
            rmq[i][j]=min (a,b);
        }
    }

    for (int i=1;i<=q;++i)
    {
        int x,y,len;
        fin >>x>>y;
        len=y-x+1;
        len=log2 (len);
        fout <<min (rmq[x][len],rmq[y-int (pow (2,len-1))][len])<<'\n';
    }
    fin.close ();
    fout.close ();
    return 0;
}