Pagini recente » Cod sursa (job #1375348) | Cod sursa (job #2815653) | Cod sursa (job #739007) | Cod sursa (job #3176804)
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <climits>
#define N_MAX 100001
#define N_LOG 20
using namespace std;
int n, m, table[N_MAX][N_LOG];
void build (){
for (int j=1; j<N_LOG; ++j){
for (int i=0; i + (1<<(j-1))<n; ++i){
table[i][j] = min(table[i][j-1], table[i+(1<<(j-1))][j-1]);
}
}
}
int query (int left, int right){
int rez = INT_MAX;
for (int j=N_LOG; j>=0; --j){
if ((1 << j) <= right - left + 1){
rez = min (table[left][j], rez);
left += (1 << j);
}
}
return rez;
}
int main (){
FILE *in, *out;
in = fopen ("rmq.in", "r");
out = fopen ("rmq.out", "w");
fscanf (in, "%d%d", &n, &m);
for (int i=0; i<n; ++i)
fscanf (in, "%d", &table[i][0]);
build();
int x, y;
for (int i=1; i<=m; ++i){
fscanf(in, "%d%d", &x, &y);
fprintf(out, "%d \n", query(x-1, y-1));
}
fclose(in);
fclose(out);
return 0;
}