Pagini recente » Cod sursa (job #329345) | Cod sursa (job #401975)
Cod sursa(job #401975)
#include <stdio.h>
#include <algorithm>
#define Nmax 100005
using namespace std;
int n, m, i, k, q, x, y, sol = Nmax;
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++){
fscanf(f, "%d %d", &x, &y);
q = log [y - x];
for (i = x ; i <= y - (1<<q) + 1 ; i++)
if (sol > a[q][i])
sol = a[q][i];
fprintf (g, "%d", sol);
}
fclose(f);
fclose(g);
return 0;
}