Pagini recente » Cod sursa (job #1782143) | Cod sursa (job #802978) | Cod sursa (job #2360078) | Cod sursa (job #240162) | Cod sursa (job #2328555)
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
///n - nr de elem. al vectorului
///m - nr de intrebari de forma [a, b]
int n, m;
int a[100000];
int st[100000][25];
void generateSparseTable()
{
for(int i = 0; i < n; i++)
st[i][0] = a[i];
for(int j = 1; (1<<j) <= n; j++)
for(int i = 0; (i + (1 << j) - 1) < n; i++)
{
st[i][j] = min(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
}
}
void printSparseTable()
{
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
cout<<st[i][j];
cout<<endl;
}
}
int main()
{
f>>n>>m;
for(int i = 0; i < n; i++)
{
f>>a[i];
}
generateSparseTable();
int L, R;
for(int i = 0; i < m; i++)
{
f>>L>>R;
L--;
R--;
int j = log2(R - L + 1); ///log2(lungimea intervalului)
g<<min(st[L][j], st[R - (1 << j) + 1][j])<<'\n';
}
return 0;
}