Cod sursa(job #3294802)

Utilizator Mirc100Mircea Octavian Mirc100 Data 28 aprilie 2025 17:04:22
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/


#include <fstream>
 #include <iostream>
#include<cmath>
using namespace std;
const int NMAX = 1e5;
int rmq[NMAX],a[NMAX];
int b,n,m;
void rmq_bloc(){
    
    int i=0;
    while(i<n){
        rmq[i/b]=a[i];
        int j;
        for(j=1;j<b && i+j<n;j++)
            rmq[i/b]=min(rmq[i/b],a[i+j]);
        i=i+j;    
    }

    
}

int query_bloc(int x, int y){
    int r=a[x];
    while(x<=y){
   
        if (x%b==0){
            r=min(r,rmq[x/b]);
            x=x+b;
        }
        else{
            r=min(r,a[x]);
            x+=1;
        }
    }
    return r;
}
int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");
    int x,y;
    f>>n>>m;
    b=(int)log2(n);
    for(int i=0;i<n;i++)
         f>> a[i];
    rmq_bloc();
    for(int i=0;i<m;i++){
        f>>x>>y;
        g<<query_bloc(x-1,y-1)<<endl; //de la 0 indicii
    }
    f.close();
    g.close();

    return 0;
}