Pagini recente » Cod sursa (job #2877306) | Cod sursa (job #1665189) | Cod sursa (job #2081566) | Cod sursa (job #2346089) | Cod sursa (job #1442868)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 100000 + 1;
int T[2 * Nmax];
int N, M;
void build()
{
for (int i = N - 1; i >= 1; i--)
T[i] = min(T[(i << 1)], T[(i << 1) | 1]);
}
void update(int x, int value)
{
x += N;
T[x] = value;
while (x > 1)
{
T[x >> 1] = max(T[x], T[x ^ 1]);
x >>= 1;
}
}
int query(int x, int y) /// [x, y)
{
x += N;
y += N;
int sol = numeric_limits<int>::max();
while (x < y)
{
if (x & 1)
{
sol = min(sol, T[x]);
x++;
}
if (y & 1)
{
y--;
sol = min(sol, T[y]);
}
x >>= 1;
y >>= 1;
}
return sol;
}
int main()
{
FILE *in = fopen("rmq.in", "r");
FILE *out = fopen("rmq.out", "w");
fscanf(in, "%d %d ", &N, &M);
for (int i = 0; i < N; ++i)
fscanf(in, "%d ", &T[i + N]);
build();
for (int i = 1; i <= M; ++i)
{
int tip, a, b;
fscanf(in, "%d %d ", &a, &b);
a--; b--;
fprintf(out, "%d\n", query(a, b + 1));
}
return 0;
}