Pagini recente » Cod sursa (job #1515301) | Cod sursa (job #1202241) | Cod sursa (job #3031691) | Cod sursa (job #1161190) | Cod sursa (job #189960)
Cod sursa(job #189960)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MIN( a, b ) (a) < (b) ? (a) : (b)
#define NMAX 100005
#define LOGMAX 18
#define FIN "rmq.in"
#define FOUT "rmq.out"
int RMQ[LOGMAX][NMAX], POW[NMAX];
int N, M;
void build()
{
int i, j;
for( j = 1; j < LOGMAX; j++ )
for( i = 1; i <= N - ( 1 << j ) + 1; i++ )
RMQ[j][i] = MIN( RMQ[j-1][i], RMQ[j-1][i+( 1<<(j-1))]);
}
void compute()
{
int i, step = 0;
while( 1 << step <= N )
POW[ 1 << step ] = step++;
for( i = 2; i <= N; i++ )
if( !POW[i] )
POW[i] = POW[i-1];
}
int main()
{
int l, r;
FILE * fin = fopen( FIN, "r");
FILE * fout = fopen( FOUT, "w");
fscanf( fin, "%d%d", &N, &M );
for( int i = 1; i <= N; i++ )
fscanf( fin, "%d", &RMQ[0][i] );
build();
compute();
while( M-- )
{
fscanf( fin, "%d%d", &l, &r );
int step = POW[r-l+1];
fprintf( fout, "%d\n", MIN( RMQ[step][l], RMQ[step][r - ( 1 << step ) + 1]));
}
return 0;
}