Pagini recente » Cod sursa (job #2451555) | Cod sursa (job #2538771) | Cod sursa (job #1114127) | Cod sursa (job #287207) | Cod sursa (job #2329706)
#include <iostream>
#include <fstream>
#include <cmath>
#define MAX 100001
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int a[MAX];
int n;
int sparse[MAX][30];
void ConstructTable()
{
for (int i = 0; i < n; i++)
sparse[i][0] = a[i];
for (int j = 1; (1 << j) <= n; j++)
{
for (int i = 0; (i + (1 << j) -1) < n; i++)
{
sparse[i][j] = min(sparse[i][j-1],sparse[i+(1 << (j-1))][j-1]);
}
}
}
int rmq(int a,int b)
{
a--;
b--;
int l = b - a + 1;
int k = log2(l);
return min(sparse[a][k], sparse[b - (1 << k) + 1][k]);
}
int main()
{
int m;
fin >> n >> m;
for (int i = 0; i < n; i++)
fin >> a[i];
ConstructTable();
while (m--)
{
int a, b;
fin >> a >> b;
fout << rmq(a,b) << "\n";
}
return 0;
}