Cod sursa(job #2280301)

Utilizator DragosArseneDragos Arsene DragosArsene Data 10 noiembrie 2018 13:41:56
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <iostream>
#include <stdio.h>
using namespace std;
int d[100001][18];
int v[100001];
int log[100001];
int main() {
    FILE *fin, *fout;
    int i, j, n, m, p;

fin = fopen("rmq.in", "r");
fout = fopen("rmq.out", "w");

fscanf(fin,"%d%d", &n, &m);
for(i=1;i<=n;i++)
    fscanf(fin,"%d", &v[i]);

for(i=1;i<=n;i++)
    d[i][0]=v[i];

for(p=1;(1<<p)<n;p++){
    for(i=1;i+(1<<p)-1<=n;i++){
        d[i][p]=min(d[i][p-1], d[i+(1<<p-1)][p-1]);
    }
}

log[1]=0;

for(i=2;i<=n;i++)
    log[i]=log[i/2]+1;

for(m;m>0;m--){
    fscanf(fin,"%d%d", &i, &j);
    fprintf(fout, "%d\n", min(d[i][log[j-i]], d[j-(1<<log[j-i])+1][log[j-i]]));
}




fclose(fin);
fclose(fout);


    return 0;
}