Pagini recente » Cod sursa (job #698503) | Cod sursa (job #616824) | Cod sursa (job #1813744) | Cod sursa (job #482946) | Cod sursa (job #1097132)
#include<stdio.h>
#include<algorithm>
#define DIM 100005
#define DIM2 18
using namespace std;
FILE *f=fopen("rmq.in","r"), *g=fopen("rmq.out","w");
long int n, m, v[DIM], a[DIM][DIM2], log[DIM];
// a[i][j] = numarul minim de la i, 2^j numere
void citire_initiala(){
long int i;
fscanf(f,"%ld %ld\n",&n,&m);
for(i=1;i<=n;i++)fscanf(f,"%ld\n",&v[i]);
}
void initializare_a(){
long int i;
for(i=1;i<=n;i++) a[i][0] = v[i];
}
void creare_a(){
long int j, i;
for( j=1; (1<<j) <= n; j++ ){
for( i=1; i+ (1<<j) -1 <= n ; i++){
a[i][j] = min( a[ i ][ j-1 ], a[ i+ ( 1<<(j-1) ) ][ j-1 ] );
}
}
}
void aflare(){
long int i, x, y, dif, lg;
log[1]=0;
for (i=2;i<=n;i++)
log[i]=log[i/2]+1;
for(i=1;i<=m;i++){
fscanf(f,"%ld %ld\n",&x,&y);
dif = y-x+1; lg= log[dif];
fprintf(g,"%ld\n", min( a[x][lg], a[ y-(1<<lg)+1 ][lg] ) );
}
}
int main(){
citire_initiala();
initializare_a();
creare_a();
aflare();
return 0;
}