Pagini recente » Cod sursa (job #2221224) | Cod sursa (job #1755797) | Cod sursa (job #2689930) | Cod sursa (job #3289468) | Cod sursa (job #3153232)
#include <stdio.h>
#define NMAX (100000)
#define INF (0x7fffffff)
int n, q, fenwick[NMAX + 1], v[NMAX + 1];
int min(int x, int y)
{
return x <= y ? x : y;
}
int& set_min(int& x, int y)
{
if(y < x) x = y;
return x;
}
void build(int* fen)
{
for(int i = 1; i <= n; i++)
if(i + (i & -i) <= n)
set_min(fen[i + (i & -i)], fen[i]);
}
int fen_query(int* fen, int* v, int l, int r)
{
int ans = INF;
while(l < r)
{
int next = r - (r & -r);
if(next < l)
{
set_min(ans, v[r]);
r--;
}
else
{
set_min(ans, fen[r]);
r = next;
}
}
return ans;
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d %d", &n, &q);
for(int i = 1; i <= n; i++)
{
scanf("%d", &v[i]);
fenwick[i] = v[i];
}
build(fenwick);
for(int i = 0; i < q; i++)
{
int l, r;
scanf("%d %d", &l, &r);
printf("%d\n", fen_query(fenwick, v, l - 1, r));
}
return 0;
}