Pagini recente » Monitorul de evaluare | Clasament dupa rating | Istoria paginii utilizator/casianos1996 | Istoria paginii utilizator/sanzianagrecu | Cod sursa (job #1342624)
#include<fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int N = 100001;
const int LOGN = 17;
int n, m;
int r[LOGN][N];
int lg[N];
inline int min(int x, int y)
{
return (x < y) ? x : y;
}
void rmq()
{
lg[1] = 0;
for(int i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
for(int i = 1; i <= lg[n]; i++)
for(int j = 1; j <= n; j++)
{
if(j + (1 << i) - 1 > n)
continue;
r[i][j] = min(r[i - 1][j], r[i - 1][j + (1 << (i - 1))]);
}
}
void citire()
{
in >> n >> m;
for(int i = 1; i <= n; i++)
in >> r[0][i];
}
void query(int a, int b)
{
int l = lg[b - a + 1];
out << min(r[l][a], r[l][b - (1 << l) + 1]) << '\n';
}
int main()
{
citire();
rmq();
for(int i = 1; i <= m; i++)
{
int a, b;
in >> a >> b;
query(a, b);
}
return 0;
}