Pagini recente » Cod sursa (job #971628) | Cod sursa (job #2342958) | Cod sursa (job #949154) | Cod sursa (job #2313491) | Cod sursa (job #3155482)
#include <iostream>
#include<fstream>
#include<algorithm>
#include<math.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int arr[17][100000], n;
void buildTabel()
{
int i, logarithm = (int)(log2(n)), j,power;
for (i = 1; i <= logarithm; i++)
{
power = (int)(pow(2, i - 1));
for (j = 0; j < n - ((2 * i) - 1); j++)
{
arr[i][j] = min(arr[i - 1][j], arr[i - 1][j + power]);
}
}
}
int findMin(int a, int b)
{
int i, len, loga, mini,power;
len = b - a + 1;
loga = log2(len);
mini = arr[loga][a];
power = pow(2, loga);
a += power;
len -= power;
while (len > 0)
{
loga = log2(len);
mini = min(mini, arr[loga][a]);
power = pow(2, loga);
a += power;
len -= power;
}
return mini;
}
int main()
{
int m, i,a,b,min;
fin >> n;
fin >> m;
for (i = 0; i < n; i++)
fin >> arr[0][i];
buildTabel();
for (i = 0; i < m; i++)
{
fin >> a;
fin >> b;
a--;
b--;
min = findMin(a, b);
cout << min << "\n";
fout << min << "\n";
}
}