Cod sursa(job #3294798)

Utilizator Mirc100Mircea Octavian Mirc100 Data 28 aprilie 2025 16:39:41
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 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<cmath>
using namespace std;
const int NMAX = 1e5;
int rmq[NMAX+1][20],n,m, Log2[NMAX+1];
void preproc_rmq(){
 
    Log2[1]=0; //nu ex 0
    for(int i=2;i<=NMAX;i++) Log2[i]=Log2[i/2]+1;
    for(int j=1;(1<<j)<=n;j++) //dupa j crescator 
        for(int i=0;i+(1<<j)-1<n;i++) //pentru orice i cu 1+(2**j)-1<n
            rmq[i][j]=min(rmq[i][j-1], rmq[i+(1<<(j-1))][j-1]); //1+2**j*/
            
     
}

int query(int x, int y){
    int k = Log2[y - x + 1];
    return min(rmq[x][k], rmq[y-(1<<k)+1][k]); //1...8
}
int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");
    int x,y;
    f>>n>>m;
    for(int i=0;i<n;i++)
         f>>rmq[i][0]; //a[i]
    preproc_rmq();
    for(int i=0;i<m;i++){
        f>>x>>y;
        g<<query(x-1,y-1)<<endl; //de la 0 indicii
    }
    f.close();
    g.close();

    return 0;
}