Cod sursa(job #2445212)

Utilizator CharacterMeCharacter Me CharacterMe Data 3 august 2019 10:51:54
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <iostream>
#include <cstdio>
#include <cmath>
#define maxl int(log2(100000))+2
using namespace std;
int n, m, val[maxl][100001], i, j;
int main()
{
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; ++i) scanf("%d", &val[0][i]);
    for(j=1; (1<<j)<=n; ++j){
        for(i=1; i<=n; ++i){
            val[j][i]=val[j-1][i];
            int next=i+(1<<(j-1));
            if(next<=n) val[j][i]=min(val[j][i], val[j-1][next]);
        }
    }
    for(i=1; i<=m; ++i){
        int x, y;
        scanf("%d%d", &x, &y);
        int j=int(log2(y-x+1));
        printf("%d\n", min(val[j][x], val[j][y-(1<<j)+1]));
    }
    return 0;
}