Pagini recente » Cod sursa (job #2792535) | Cod sursa (job #1820421) | Cod sursa (job #1265097) | Cod sursa (job #1210742) | Cod sursa (job #2754121)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int MAX_N = 100001;
const int LOG = 17; // log2(100001)
int a[MAX_N];
int st[MAX_N][LOG];
int query(int L, int R)
{
int len = R - L + 1;
int k = 0;
while ((1 << (k + 1)) <= len)
{
k++;
}
return min(st[L][k], st[R - (1 << k) + 1][k]);
}
int main()
{
//input here
int n, m;
fin >> n;
fin >> m;
for (int i = 0; i < n; i++)
{
fin >> a[i];
st[i][0] = a[i];
}
//preprocessing the mins
for (int j = 1; j < LOG; j++)
{
for (int i = 0; i + (1 << j) - 1 < n; i++)
{
st[i][j] = min(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
}
}
//answering the queries
for (int i = 0; i < m; i++)
{
int L, R;
fin >> L >> R;
fout << query(L-1, R-1) << "\n";
}
}