Cod sursa(job #3291124)

Utilizator bandyAndrei Raileanu Szeles bandy Data 3 aprilie 2025 12:04:37
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int m[18][100001];
int v[100001];
int w[100001];
int n,M;

void matricia(){
    for(int i=0;i<n;i++){
        m[0][i]=v[i];
    }
    for(int p=1;(1<<p)-1<=n;p++){
        for(int i=0;i<n;i++){
            m[p][i]=m[p-1][i];
            int j=i+(1<<(p-1));
            if(j<n)
            {
                m[p][i]=min(m[p][i],m[p-1][j]);
            }
        }
    }
    w[0]=0;
    for(int i=1;i<n;i++){
        w[i]=1+w[(i+1)/2];
    }
}

int main()
{
    in>>n>>M;
    for(int i=0;i<n;i++){
        in>>v[i];
    }
    matricia();
    for(int i=0;i<M;i++){
        int l,c;
        in>>l>>c;
        l--;
        c--;
        int e=w[l-c+1],j=1<<e;
        out<<min(m[e][l],m[e][c-j+1])<<'\n';
    }
    return 0;
}