Pagini recente » Cod sursa (job #551575) | Cod sursa (job #1547978) | Cod sursa (job #448523) | Cod sursa (job #183581) | Cod sursa (job #1537927)
///SPARSE TABLE ALGORITHM
///PREPROCESARE O(N log2 N)
///QUERY O(1)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int M[100001][17];
int A[100001];
int N,T;
void preprocesare()
{
int i,j;
for(i = 0; i < N; i++)
M[i][0] = i;
for(j = 1; 1 << j <= N; j++)
for(i = 0; i + (1 << j) - 1 < N; i++)
if(A[ M[i][j - 1] ] < A[ M[i + (1 << (j - 1))][j - 1] ])
M[i][j] = M[i][j - 1];
else
M[i][j] = M[i + (1 << (j - 1))][j - 1];
}
int main()
{
int x,y,k;
f >> N >> T;
for(int i = 0; i < N; i++)
f >> A[i];
preprocesare();
for(int i = 0; i < T; i++)
{
f >> x >> y;
x--,y--;
k = log2(y - x + 1);
if(A[ M[x][k] ] < A[ M[y - (1 << k) + 1][k] ])
g << A[ M[x][k] ]<< "\n";
else
g << A[ M[y - (1 << k) + 1][k] ]<< "\n";
}
/*for(int i = 0; i < N; i++)
{
for(int j = 0; (1 << j) <= N; j++)
g << M[i][j] << " ";
g << "\n";
}*/
return 0;
}