Cod sursa(job #2836258)

Utilizator Vlad_NistorNIstor Vlad Vlad_Nistor Data 19 ianuarie 2022 23:35:29
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
int e[100010], a[17][100010];
int n,q;
int ex, j,x,y,len;
int main(void){
    FILE* cout  = fopen("rmq.out","w");
    FILE* cin =  fopen("rmq.in", "r");
    fscanf(cin,"%d%d",&n,&q);
    for(int i =1;i<=n;i++){
       fscanf(cin,"%d",a[0][i]);
    }
    for(int p = 1;(1<<p)<=n;p++){
        for(int i = 1;i<=n;i++){
            a[p][i] = a[p-1][i];
            j = i + (1<<(p-1));
            if(j <= n && a[p][i] > a[p-1][j])
                a[p][i] = a[p-1][j];
        }
    }
    for(int i = 2;i<=n;i++){
        e[i] = 1+e[i/2];
    }
    for(int i =0;i<q;i++){
         x,y;
        fscanf(cin,"%d%d",&x,&y);
         ex = e[y-x+1];
        len = 1<<ex;
        fprintf(cout,"%d",min(a[ex][x], a[ex][y-len+1]));
    }
}