Pagini recente » Cod sursa (job #2558356) | Cod sursa (job #1162838) | Cod sursa (job #1103421) | Cod sursa (job #3242342) | Cod sursa (job #3291406)
#include <fstream>
#include <iostream>
#include <climits>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int a[105][100005];
int l;
int putm(int x)
{
int p = 1, nr = 0;
while (x >= p)
{
p = p * 2;
nr++;
}
return nr - 1;
}
void bdkinda()
{
for (int i = 0; i < 21; i++)
for (int j = 0; j < 100005; j++)
a[i][j] = INT_MAX;
}
void genMat(int n)
{
int jc = 1;
for (int i = 1; i < l; i++)
{
for (int j = 0; j < n; j++)
{
a[i][j] = min(a[i - 1][j], a[i - 1][j + jc]);
}
jc *= 2;
}
}
int scrieM(int n)
{
for (int i = 0; i < l; i++, cout << '\n')
{
for (int j = 0; j < n; j++)
{
cout << a[i][j] << ' ';
}
}
}
struct interval
{
int start, finish;
};
int query(interval x)
{
int pmin = putm(x.finish - x.start + 1);
return min(a[pmin][x.start], a[pmin][x.finish - pmin]);
}
int main()
{
int n, m;
fin >> n >> m;
l = putm(n);
l++;
bdkinda();
for (int i = 0; i < n; i++)
{
fin >> a[0][i];
}
genMat(n);
scrieM(n);
for (int i = 0; i < m; i++)
{
interval x;
fin >> x.start >> x.finish;
x.start--;
x.finish--;
fout << query(x) << '\n';
}
return 0;
}