Pagini recente » Atasamentele paginii Clasament oni2014_ziua1 | Cod sursa (job #2252380) | Cod sursa (job #2455827) | Istoria paginii runda/rar93/clasament | Cod sursa (job #2775675)
#include <iostream>
#include <fstream>
#define NMAX 100000
#define LMAX 20
#define INF 99999999
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int N, M;
int d[NMAX][LMAX];
void read() {
fin >> N >> M;
for (int i = 0; i < N; ++i) {
fin >> d[i][0];
}
}
void create() {
for (int j = 1; (1 << j) < N; ++j) {
for (int i = 0; i < N; ++i) {
if (i + (1 << (j - 1))< N) {
d[i][j] = min(d[i][j - 1], d[i + (1 << (j - 1))][j - 1]);
}
}
}
}
int query(int x, int y) {
int mini = INF;
int dist = (y - x) + 1;
for (int j = LMAX; j >= 0; --j) {
if ((1 << j) <= dist) {
mini = min(mini, d[x][j]);
x = x + (1 << j);
dist -= (1 << j);
}
}
return mini;
}
int main()
{
read();
create();
int x, y;
for (int i = 0; i < M; ++i) {
fin >> x >> y;
fout << query(x - 1, y - 1) << "\n";
}
return 0;
}