Pagini recente » Cod sursa (job #736418) | Cod sursa (job #1195938) | Cod sursa (job #651748) | Cod sursa (job #2828736) | Cod sursa (job #2799327)
#include <iostream>
#include <stdio.h>
using namespace std;
#define MAXN 100000
#define INF 100001
int v[MAXN], rmq[MAXN][20];
int min(int a, int b){
if(a < b){
return a;
}else{
return b;
}
}
int main()
{
FILE *fin, *fout;
int n, m, i, j, put, st, dr;
fin = fopen("rmq.in", "r");
fscanf(fin, "%d%d", &n, &m);
for(i = 0; i < n; i++){
fscanf(fin, "%d", &v[i]);
}
for(i = 0; i < n; i++){
for(j = 0; j < 20; j++){
rmq[i][j] = INF;
}
}
for(i = n - 1; 0 <= i; i--){
rmq[i][0] = v[i];
put = 2;
j = 1;
while((i + put - 1) < n){
rmq[i][j] = min(rmq[i][j - 1], rmq[i + put / 2][j - 1]);
put *= 2;
j++;
}
}
fout = fopen("rmq.out", "w");
for(i = 0; i < m; i++){
fscanf(fin, "%d%d", &st, &dr);
put = 1;
j = 0;
while(put <= (dr - st + 1)){
put *= 2;
j++;
}
put /= 2;
j--;
fprintf(fout, "%d\n", min(rmq[st - 1][j], rmq[dr - put][j]));
}
fclose(fin);
fclose(fout);
return 0;
}