Cod sursa(job #3255267)

Utilizator answarIonascu Andrei answar Data 9 noiembrie 2024 21:18:35
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int v[20][100010];
int w[100010];
int n,m,i,j,k,st,dr,minim,poz,l;
int main () {
    cin>>n>>m;
    for (i=1;i<=n;i++) {
        cin>>v[0][i];
    }
    for (k=1;(1<<k)<=n;k++) {
        for (i=1;i<=n;i++) {
            j=i+(1<<(k-1));
            if (j<=n) {
                v[k][i]=min(v[k-1][i],v[k-1][j]);
            }
        }
    }
    w[1]=0;
    for (i=2;i<=n;i++) {
        w[i]=w[i/2]+1;
    }
    for (i=1;i<=m;i++) {
        cin>>st>>dr;
        poz=w[dr-st+1];
        l=(1<<poz);
        cout<<min(v[poz][st],v[poz][dr-l+1])<<"\n";
    }
}