Pagini recente » Cod sursa (job #2758586) | Cod sursa (job #1059998) | Cod sursa (job #263125) | Cod sursa (job #243748) | Cod sursa (job #1786200)
#include <cstdio>
#define NMAX 100000
#define LOGNMAX 17
using namespace std;
int n, m;
int v[NMAX], lg[NMAX];
int w[LOGNMAX][NMAX];
int min(int a, int b){
return a<b?a:b;
}
int main()
{
FILE* f = fopen("rmq.in", "r");
FILE* f1 = fopen("rmq.out", "w");
fscanf(f, "%d %d", &n, &m);
lg[1]=0;
for(int i=2;i<n;i++){
lg[i] = lg[i/2] + 1;
}
for(int i=0;i<n;i++){
fscanf(f, "%d", &v[i]);
}
for(int i=0;i<n;i++){
w[0][i] = v[i];
}
for(int i=1;(1<<i)<=n;i++){
for(int j=0;j<=(n-(1<<i));j++){
w[i][j] = min(w[i-1][j], w[i-1][j+(1<<(i-1))]);
}
}
for(int i=0;i<m;i++){
int x, y;
fscanf(f, "%d %d", &x, &y);
int diff = y-x+1;
int logd = lg[diff];
int delta = diff - (1<<logd);
int res = min(w[logd][x-1], w[logd][x-1+delta]);
fprintf(f1, "%d\n", res);
}
return 0;
}