Cod sursa(job #2786826)

Utilizator Casian_doispeChiriac Casian Casian_doispe Data 21 octombrie 2021 18:22:37
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <deque>
#include <algorithm>
#include <vector>
#include <queue>
#include <limits.h>
#include <bitset>

#define MOD 666013

using namespace std;

ifstream cin ("rmq.in");
ofstream cout ("rmq.out");

int n;
int v[100009];

struct nod
{

    int val = 0 ;

};

nod t[200009] ;

void build()
{

    for(int f = n + 1 ; f <= n<<1 ; f ++)
        t[f].val = v[f - n] ;

    for(int f = n ; f ; f --)
        t[f].val = min(t[f<<1].val, t[(f<<1) + 1].val) ;

}

int query(int st, int dr)
{
    int rez = INT_MAX ;

    dr ++ ; /// fara asta face in mod normal intervalul [sy, dr)

    for (st += n, dr += n; st < dr; st >>= 1, dr >>= 1)
    {
        if(st % 2)rez = min(rez, t[st].val), st ++ ;
        if(dr % 2)dr --, rez = min(t[dr].val, rez) ;
    }

    return rez ;
}

int main()
{

    int q ;

    cin >> n >> q ;

    for(int f = 1 ; f <= n ; f ++)
        cin >> v[f] ;

    t[(n<<1) + 1].val = INT_MAX ;

    build() ;

    while(q --)
    {

        int st, dr ;

        cin >> st >> dr ;

        cout << query(st, dr) << '\n' ;

    }


    return 0;
}