Cod sursa(job #2531779)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 26 ianuarie 2020 18:39:28
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>

using namespace std;

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

int mat[100005][20];
int lg2[100005];

int main(){
    int n,m,i,j,a,b,dif,aux,lg;
    fin>>n>>m;
    for(i = 1; i <= n; i++){
        fin>>mat[i][0];
    }
    for(i = 2; i <= n; i++){
        lg2[i] = lg2[i/2] + 1;
    }
    for(i = 1; i <= lg2[n]; i++){
        for(j = 1; j <= n - (1<<(i))+1; j++){
            aux = (1<<(i-1));
            mat[j][i] = min(mat[j][i-1],mat[j+aux][i-1]);
        }
    }
    for(i = 1; i <= m; i++){
        fin>>a>>b;
        dif = b-a+1;
        lg = lg2[dif];
        aux = dif - (1<<(lg));
        fout<<min(mat[a][lg],mat[a+aux][lg])<<endl;
    }
    return 0;
}