Pagini recente » Cod sursa (job #2360078) | Cod sursa (job #240162) | Cod sursa (job #2328555) | Cod sursa (job #952030) | Cod sursa (job #2625742)
#include <iostream>
#include <cmath>
using namespace std;
FILE * fin, * fout;
int v[1000005];
int rmq[18][1000005];
int main(){
fin = fopen("rmq.in","r");
fout = fopen("rmq.out","w");
int N, M;
fscanf(fin,"%d%d",&N,&M);
for ( int i = 1; i <= N; i++ ){
fscanf(fin,"%d",v+i);
rmq[0][i] = v[i];
}
for (int i = 1; (1 << i) <= N; i++){
for (int j = 1; j <= N - (1 << i) + 1; j++){
int l = 1 << (i - 1);
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + l]);
}
}
int x, y, d;
for (long int i = 1; i <= M; i++) {
fscanf(fin,"%d%d",&x,&y);
d = y - x + 1;
int l = (int)log2(d);
d = d - (1 << l);
fprintf(fout,"%d\n",min(rmq[l][x], rmq[l][x + d]));
}
fclose(fin);
fclose(fout);
return 0;
}