Pagini recente » Cod sursa (job #3257181) | Cod sursa (job #2002588) | Cod sursa (job #3205896) | Cod sursa (job #2916068) | Cod sursa (job #1320466)
#include <iostream>
#include <fstream>
#define nmax 100005
#define inf 1<<30
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m;
int A[nmax], Exp[nmax];
int Min[20][nmax];
void preprocess() {
for (int i = 1; i <= n; i++)
Min[0][i] = A[i];
for (int i = 1; i <= 17; i++) {
for (int j = 1; j <= (n - (1<<i) + 1); j++) {
int st = j;
int dr = j + (1<<i) - 1;
int mid = dr - (1<<(i-1)) + 1;
Min[i][j] = min(Min[i-1][st], Min[i-1][mid]);
}
}
}
void citire() {
fin >> n >> m;
for (int i = 1; i <= n; i++)
fin >> A[i];
}
void solve() {
preprocess();
Exp[1] = 0;
for (int i = 2; i <= n; i++)
Exp[i] = Exp[i/2] + 1;
for (int i = 1; i <= m; i++) {
int x, y, rez = inf;
fin >> x >>y;
int l = y - x + 1;
int k = Exp[l];
rez = min(rez, Min[k][x]);
x = y - (1<<k) + 1;
rez = min(rez, Min[k][x]);
fout << rez << "\n";
}
}
int main() {
citire();
solve();
fin.close();
fout.close();
return 0;
}