Pagini recente » Cod sursa (job #2159507) | Diferente pentru implica-te/arhiva-educationala intre reviziile 223 si 10 | Cod sursa (job #2529196) | Cod sursa (job #1102709) | Cod sursa (job #408013)
Cod sursa(job #408013)
#include <stdio.h>
#include <algorithm>
#define Nmax 100005
using namespace std;
int n, m, i, j, k, x, y;
int A[17][Nmax], log[Nmax];
FILE * f = fopen ("rmq.in", "r");
FILE * g = fopen ("rmq.out", "w");
void citire(){
fscanf (f, "%d %d", &n, &m);
for (i = 1 ; i <= n ; i++)
fscanf (f, "%d", &A[0][i]);
}
void preprocesare(){
for (k = 1 ; (1<<k) <= n ; k++)
for (i = 1 ; i + (1<<k) - 1 <= n ; i++)
A[k][i] = min( A[ k-1 ][ i ], A[ k-1 ][ i+(1 << (k-1)) ] );
}
void logaritm (){
for (i = 2 ; i <= n ; i++)
log[i] = log[i>>1] + 1;
}
void rezolvare(){
for (i = 1 ; i <= m ; i++){
fscanf (f, "%d %d", &x, &y);
j = log[y-x+1];
fprintf (g, "%d\n", min(A[j][x], A[j][y - (1<<j) + 1]));
}
}
int main(){
citire();
preprocesare();
logaritm();
rezolvare();
fclose(f);
fclose(g);
return 0;
}