Pagini recente » Cod sursa (job #210035) | Cod sursa (job #1253231) | Cod sursa (job #1594625) | Cod sursa (job #178994) | Cod sursa (job #3039958)
#include <fstream>
using namespace std;
int v[100006];
const int LOG = 17;
int lookup[10006][LOG];
int query(int L, int R)
{
int length = R - L + 1;
int k = 31 - __builtin_clz(length);
return min(lookup[L][k], lookup[R-(1<<k)+1][k]);
}
void RMQ(int n)
{
for (int j = 1; j < LOG; j++)
for (int i = 1; i + (1<<j) - 1 <= n; i++)
{
lookup[i][j] = min(lookup[i][j-1], lookup[i+(1<<(j-1))][j-1]);
}
}
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int main()
{
int n, m, L, R;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> v[i];
lookup[i][0] = v[i];
}
RMQ(n);
for (int q = 1; q <= m; q++)
{
cin >> L >> R;
cout << query(L, R) << '\n';
}
return 0;
}