Pagini recente » Cod sursa (job #2596949) | Cod sursa (job #374666) | Cod sursa (job #2969504) | Cod sursa (job #26259) | Cod sursa (job #1423804)
#include <fstream>
#include <algorithm>
using namespace std;
int N, M, lg[100001], rmq[17][100001];
ifstream fin("rmq.in");
ofstream fout("rmq.out");
void create_lg(int n){
lg[1] = 0;
for (int i = 2; i <= n; i++)
lg[i] = lg[i/2] + 1;
}
void create_rmq(int n){
for (int i = 1; (1 << i) <= n; i++)
for (int j = 1; j + (1 << i) - 1 <= n; j++)
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + (1 << i) - 1]);
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; i++)
fin >> rmq[0][i];
create_lg(N);
create_rmq(N);
for (int a, b, i; M; M--){
fin >> a >> b;
i = lg[b - a + 1];
fout << min(rmq[i][a], rmq[i][b - (1 << i) + 1]) << '\n';
}
return 0;
}