Pagini recente » Cod sursa (job #661925) | Cod sursa (job #517939) | Cod sursa (job #1247019) | Cod sursa (job #741175) | Cod sursa (job #2572489)
#include <bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int DIM = 1e5 + 7;
const int DIM2 = log2(DIM) + 1;
int n, m;
int v[DIM];
int rmq[DIM2][DIM];
void build()
{
for(int i = 1; i <= n; i++)
rmq[0][i] = i;
for(int i = 1; (1 << i) <= n; i++)
for(int j = 1; j + (1 << (i - 1)) <= n; j++)
{
int val1 = v[rmq[i - 1][j]];
int val2 = v[rmq[i - 1][j + (1 << (i - 1))]];
if(val1 < val2)
rmq[i][j] = rmq[i - 1][j];
else
rmq[i][j] = rmq[i - 1][j + (1 << (i - 1))];
}
}
int query(int st, int dr)
{
int l = dr - st + 1;
int k = log2(l);
return min(v[rmq[k][st]], v[rmq[k][st + l - (1 << k)]]);
}
int main()
{
in >> n >> m;
for(int i = 1 ;i <= n; i++)
in >> v[i];
build();
while(m--)
{
int x, y;
in >> x >> y;
out << query(x,y)<<'\n';
}
return 0;
}