Cod sursa(job #3178488)

Utilizator strimbumarkMark Strimbu strimbumark Data 1 decembrie 2023 19:11:05
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>
#define NM 100010
using namespace std;

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

vector<int> v;
int rmq[18][NM];
int main()
{
    
    
    
    int lg[NM+1]={0};
        lg[1] = 0;
    for (int i = 2; i <= NM; i++)
        lg[i] = lg[i/2] + 1;
        
        int n,m;
        fin>>n>>m;
        
    for(int i=1;i<=n;i++)
        fin>>rmq[0][i];
        
    for(int i=1;i<=17; i++) 
        for(int j=1; j + (1 << (i-1)) <= n ; j++)
        rmq[i][j] = min ( rmq[i-1][j] , rmq[i-1][j+ (1 << (i-1) ) ]  );
    
    int l,r;
    for(int i=1;i<=m;i++)
    {
        fin>>l>>r;
        int len = lg[r-l+1];
        int minim;
        minim = min ( rmq[len][l] , rmq[len][ r - (1 << len ) + 1] );
        v.push_back(minim);
        
    }
    
    
    for(int i=0;i<v.size();i++)
        fout<<v[i]<<"\n";
    
}