Pagini recente » Cod sursa (job #3265803) | Cod sursa (job #2739563) | Cod sursa (job #389456) | Cod sursa (job #2627128) | Cod sursa (job #2870391)
#include <bits/stdc++.h>
#define FOR(i, st, dr) for(i = st; i <= dr; i++)
#define pii pair<int,int>
//#define fin cin
//#define fout cout
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 1e5 + 5;
int n, q, w[NMAX];
int rmq[NMAX][22];
inline void computeRMQ()
{
int i, j;
for(i = 1; i <= n; ++i)
rmq[i][0] = w[i];
for(j = 1; (1 << j) <= n; ++j)
{
for(i = 1; i + (1 << j) - 1 <= n; ++i)
{
rmq[i][j] = min(rmq[i][j-1], rmq[i + (1 << (j-1))][j-1]);
}
}
}
inline int query(int a, int b)
{
if(a > b)
swap(a, b);
int lung = log2(b - a + 1);
return min(rmq[a][lung], rmq[b - (1 << lung) + 1][lung]);
}
int main()
{
fin >> n >> q;
int i;
for(i = 1; i <= n; ++i)
fin >> w[i];
computeRMQ();
for(i = 1; i <= q; ++i)
{
int a, b;
fin >> a >> b;
fout << query(a, b) << '\n';
}
return 0;
}