Pagini recente » Cod sursa (job #405933) | Cod sursa (job #2822979) | Cod sursa (job #2180936) | Cod sursa (job #2298444) | Cod sursa (job #1377355)
#include <fstream>
using namespace std;
const int MaxN = 100003;
ifstream is("rmq.in");
ofstream os("rmq.out");
int log2[MaxN], a[MaxN];
int rmq[MaxN][18];
int n, m;
int main()
{
is >> n >> m;
for ( int i = 1; i <= n; ++i )
is >> a[i];
for ( int i = 2; i <= n; ++i )
log2[i] = log2[i / 2] + 1;
for ( int i = 1; i <= n; ++i )
rmq[i][0] = a[i];
for ( int j = 1; (1 << j) <= n; ++j )
for ( int i = 1; i + (1 << j) - 1 <= n; ++i )
rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
int x, y, k;
for ( int i = 1; i <= m; ++i )
{
is >> x >> y;
k = log2[y - x + 1];
os << min(rmq[x][k], rmq[y - (1 << k) + 1][k]) << '\n';
}
is.close();
os.close();
return 0;
}