Pagini recente » Cod sursa (job #533668) | Cod sursa (job #147473) | Cod sursa (job #3186300) | Cod sursa (job #3278230) | Cod sursa (job #401995)
Cod sursa(job #401995)
#include <stdio.h>
#include <algorithm>
#define Nmax 100005
using namespace std;
int n, m, i, k, q, x, y, sol;
int a[17][Nmax], v[Nmax], log[Nmax];
void preprocesare(){
for (i = 1 ; i <= n ; i++)
a[0][i] = v[i];
for (k = 1 ; 1 << k <= n ; k++)
for (i = 1 ; i <= n - (1<<k) + 1 ; i++)
a[k][i] = min(a[k-1][i], a[k-1][i + (1<<(k-1))]);
for (i = 2 ; i <= n ; i++)
log[i] = log[i/2] + 1;
}
int main (){
FILE * f = fopen ("rmq.in", "r");
FILE * g = fopen ("rmq.out", "w");
fscanf (f, "%d %d", &n, &m);
for (i = 1 ; i <= n ; i++)
fscanf (f, "%d", &v[i]);
preprocesare();
for (i = 1 ; i <= m ; i++){
sol = Nmax;
fscanf(f, "%d %d", &x, &y);
q = log [y - x];
for (k = x ; k <= y - (1<<q) + 1 ; k++)
if (sol > a[q][k])
sol = a[q][k];
fprintf (g, "%d\n", sol);
}
fclose(f);
fclose(g);
return 0;
}