Pagini recente » Cod sursa (job #166900) | Cod sursa (job #1645773) | Cod sursa (job #1571515) | Cod sursa (job #2615526) | Cod sursa (job #3135673)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int v[100001], m[100001][21];
int main() {
int N, M;
fin >> N >> M;
for (int i = 0; i < N; i++)
fin >> v[i];
for (int i = 0; i < N; i++)
m[i][0] = v[i];
for (int j = 1; (1 << j) < N + 1; j++)
for (int i = 0; i + (1 << j) < N + 1; i++)
{
int m1 = m[i][j - 1];
int m2 = m[i + (1 << (j - 1))][j - 1];
if(m1 < m2)m[i][j] = m1;
else m[i][j] = m2;
}
for(int i = 1; i <= M; i++) {
int a, b;
fin >> a >> b;
int logaritm = log2(a - b + 1);
int m1 = m[a - 1][logaritm];
int m2 = m[b - (1 << logaritm)][logaritm];
if(m1 < m2)fout << m1 << endl;
// else fout << m2;
}
return 0;
}