Cod sursa(job #2886773)

Utilizator monicab_Balan Monica monicab_ Data 8 aprilie 2022 12:10:14
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
//#include <iostream>
#include <fstream>

using namespace std;

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

int minime[18][100005];
int a[100005];
int log[100005];

void preprocess(int arr[], int n)
{
    for (int i = 1; i <= n; i++)
        minime[0][i] = arr[i];
    for (int i = 1; (1<<i) <= n; i++)
    {
        for (int j = 1; j <= n - (1<<i) + 1 ; j++)
        {
            int lung= 1<<(i-1);
            minime[i][j]=min( minime[i-1][j], minime[i-1][j+lung]);
        }
    }
}

void RMQ(int arr[], int n, int x, int y)
{
    int nr=y-x+1;
    int lung=log[nr];
    int pas=nr- (1<<lung);
    cout << min( minime[lung][x], minime[lung][x+pas]) << endl;
}

int main()
{
    int n;
    cin >> n;
    int m;
    cin >> m;
    for(int q = 1 ; q <= n ; q++)
    {
        cin >> a[q];
    }
    preprocess(a, n);
    
    log[1] = 0;
    for(int i = 2; i <= n; i++)
            log[i] = log[i/2] + 1;
    for(int q = 0 ; q < m ; q++)
    {
        int x,y;
        cin >> x >> y;
        RMQ(a , n , x , y);
    }
    return 0;
}