Pagini recente » Cod sursa (job #183863) | Ciorna | Cod sursa (job #1293591) | Cod sursa (job #2684069) | Cod sursa (job #1497844)
#include<cstdio>
using namespace std;
const int nMax = 100002, lMax = 18;
int d[lMax][nMax], lg[nMax];
int n,m;
int minim(int a, int b){
return a < b ? a : b;
}
int main (){
FILE *in = fopen("rmq.in","r");
fscanf(in,"%d%d", &n, &m);
for(int i = 2 ; i <= n ; ++i) lg[i] = lg[i / 2] + 1;
for(int i = 1 ; i <= n ; ++i){
fscanf(in,"%d", &d[0][i]);
}
for(int i = 1 ; i <= lg[n] ; ++i){
for(int j = 1 ; j <= n - (1 << i) + 1; ++j){
d[i][j] = minim(d[i - 1][j], d[i - 1][j + (1 << (i - 1))]);
}
}
int a, b, l, diff;
FILE *out = fopen("rmq.out","w");
for(int i = 0 ; i < m ; ++i){
fscanf(in,"%d%d", &a, &b);
diff = b - a + 1;
l = lg[diff];
fprintf(out,"%d\n", minim(d[l][a], d[l][a + diff - (1 << l)]));
}
fclose(in);
fclose(out);
return 0;
}