Pagini recente » Cod sursa (job #1230730) | Cod sursa (job #526849) | Cod sursa (job #2059189) | Cod sursa (job #2283347) | Cod sursa (job #2280284)
#include <bits/stdc++.h>
#define NMAX 100000
using namespace std;
int v[NMAX + 1], logg[20], d[NMAX + 1][20];
int main(){
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int n, m, i, j, p;
scanf("%d%d", &n, &m);
for (i = 1; i <= n; i++)
scanf("%d", &v[i]);
for (i = 1; i <= n; i++)
d[i][0] = v[i];
for (p = 1; (1 << p) < n; p++) //p^2
for (i = 1; i + (1 << p) - 1 <= n; i++)
d[i][p] = min(d[i][p - 1], d[i + (1 << p - 1)][p - 1]);
logg[1] = 0;
for (i = 2; i <= n; i++)
logg[i] = logg[i / 2] + 1;
for (m; m > 0; m--)
{
scanf("%d%d", &i, &j);
printf("%d\n", min(d[i][logg[j - i]], d[j - (1 << logg[j - i]) + 1][logg[j - i]]));
}
return 0;
}