Cod sursa(job #2902819)

Utilizator andriciucandreeaAndriciuc Andreea andriciucandreea Data 16 mai 2022 20:43:11
Problema Range minimum query Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream fin ("rmq.in");
ofstream fout("rmq.out");

int nodes[400000];

void construct(int pos, int left, int right, int i, int x)
{
    if(left ==  right)
    {
        nodes[pos] = x;
        return;
    }
    int mid=(left+right)/2;
    if(i<=mid)
        construct(pos*2,left,mid,i,x);
    else
        construct(pos*2+1,mid+1,right,i,x);
    nodes[pos] = min(nodes[pos*2], nodes[pos*2+1]);
}

int min_value(int pos, int left, int right, int start, int finish)
{
    if(start <= left && right <= finish)
        return nodes[pos];
    int mid = (left + right) / 2, v1 = 1<<30, v2 = 1<<30;
    if(start <= mid)
        v1 = min_value(pos * 2, left, mid, start, finish);
     if(finish > mid)
        v2 = min_value(pos * 2 + 1, mid + 1, right, start, finish);
    return min(v1, v2);
}

int main()
{
    int n, m, x;
    fin>>n>>m;

    for(int  i = 1; i <= n; i++)
    {
        fin>>x;
        construct(1, 1, n, i, x);
    }
    
    for(int i = 0; i < m; i++)
    {
        int  a, b;
        fin>>a>>b;
        fout<<min_value(1, 1, n, a, b)<<'\n';
    }
    return 0;
}