Pagini recente » Cod sursa (job #1452943) | Cod sursa (job #361073) | Cod sursa (job #2356541) | Cod sursa (job #2113045) | Cod sursa (job #1197712)
//rmq[i][j]=min([j-(1<<i)+1, j])
#include <stdio.h>
#define MAXN 100000
#define LOGN 16
int rmq[LOGN+1][MAXN+1];
int lg[MAXN+1];
inline int min(int a, int b){
if(a<=b){
return a;
}
return b;
}
int main(){
int n, q, i, k, a, b, L, j;
FILE *fin, *fout;
fin=fopen("rmq.in", "r");
fout=fopen("rmq.out", "w");
fscanf(fin, "%d%d", &n, &q);
for(i=1; i<=n; i++){
fscanf(fin, "%d", &rmq[0][i]);
}
k=0;
for(i=1; i<=n; i++){
if(i>=(2<<k)){
k++;
}
lg[i]=k;
}
for(i=1; i<=lg[n]; i++){
for(j=1; j<=n; j++){
if(j>=(1<<i)){
rmq[i][j]=min(rmq[i-1][j], rmq[i-1][j-(1<<(i-1))]);
}
}
}
for(i=1; i<=q; i++){
fscanf(fin, "%d%d", &a, &b);
L=lg[b-a+1];
fprintf(fout, "%d\n", min(rmq[L][b], rmq[L][a+(1<<L)-1]));
}
fclose(fin);
fclose(fout);
return 0;
}