Pagini recente » Cod sursa (job #3264296) | Rating Ceuca Laura (lauraceuca) | Rating George Bodea (UtilizatorGB) | Cod sursa (job #1206189) | Cod sursa (job #155259)
Cod sursa(job #155259)
#include <cstdio>
const int MAX_N = 100001;
const int INF = 1000000000;
int N, M;
int value[MAX_N], BIT[MAX_N];
inline int min(const int &x, const int &y)
{
return x < y ? x : y;
}
void insert(int p, int value)
{
for(; p <= N; p += p ^ (p & (p - 1)))
BIT[p] = min(BIT[p], value);
}
int query(int A, int B)
{
if(A == B)
return value[A];
if((B & (B - 1)) >= A)
return min(query(A, B & (B - 1)), BIT[B]);
return min(query(A, B - 1), value[B]);
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int A, B;
scanf("%d %d", &N, &M);
for(int i = 1; i <= N; ++i)
BIT[i] = INF;
for(int i = 1; i <= N; ++i)
scanf("%d", &value[i]), insert(i, value[i]);
for(int i = 0; i < M; ++i)
{
scanf("%d %d", &A, &B);
printf("%d\n", query(A, B));
}
return 0;
}