Pagini recente » Cod sursa (job #451464) | Cod sursa (job #2035773) | Cod sursa (job #1817205) | Cod sursa (job #2112708) | Cod sursa (job #2841061)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 1e5;
int a[NMAX + 5];
vector <int> RMQ[20], log2;
void build(int* v, int n) {
int p = 1; log2.resize(n + 1, 0);
while((p <<= 1) <= n) log2[p] = 1;
for(int i = 1; i <= n; i++)log2[i] += log2[i - 1];
RMQ[0].resize(n + 1);
for(int i = 1; i <= n; i++) RMQ[0][i] = v[i];
int h = log2[n];
for(int j = 1; j <= h; j++) {
int jj = 1 << j - 1, nj = n - (1 << j) + 1;
RMQ[j].resize(nj + 1);
for(int i = 1; i <= nj; i++) RMQ[j][i] = min(RMQ[j - 1][i], RMQ[j - 1][i + jj]);
}
}
int query(int l, int r) {
int h = log2[r - l + 1];
return min(RMQ[h][l], RMQ[h][r - (1 << h) + 1]);
}
int main()
{
int n, q, l, r;
fin >> n >> q;
for(int i = 1; i <= n; i++) fin >> a[i];
build(a, n);
for(int i = 1; i <= q; i++)
fin >> l >> r,
fout << query(l, r) << "\n";
return 0;
}