Pagini recente » Cod sursa (job #1385476) | Cod sursa (job #2098278) | Cod sursa (job #1072824) | Cod sursa (job #391381) | Cod sursa (job #2824817)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int MAX_N = 100005;
const int LOG = 17; // 1 << 17 = ~131k
int m[MAX_N][LOG];
int a[MAX_N];
int Log_2[MAX_N];
int query(int L, int R)
{
int len = R - L + 1;
// take log2(len)
int k = Log_2[len];
return min(m[L][k], m[R - (1 << k)][k]);
}
int main()
{
// citire
int n, Q;
fin >> n >> Q;
Log_2[1] = 0; // 1 << 0 = 1
for(int i = 2; i <= n; i ++)
Log_2[i] = Log_2[i / 2] + 1;
for(int i = 0; i < n; i ++)
{
fin >> a[i];
m[i][0] = a[i];
}
// preprocesare
for(int j = 1; j < LOG; j ++) // 1, 2, 4, 8, 16, ..
for(int i = 0; i + (1 << j) - 1 < n; i ++)
{
m[i][j] = min(m[i][j - 1], m[i + (1 << (j - 1))][j - 1]);
}
// queries
for(int i = 0; i < Q; i ++)
{
int R, L;
fin >> L >> R;
fout << query(L, R) << "\n";
}
return 0;
}