Pagini recente » Cod sursa (job #2769762) | Cod sursa (job #55083) | Cod sursa (job #1336533) | Cod sursa (job #2566617) | Cod sursa (job #2903264)
#include <iostream>
#include <fstream>
#include <math.h>
//https://www.topcoder.com/thrive/articles/Range%20Minimum%20Query%20and%20Lowest%20Common%20Ancestor
using namespace std;
int i,j, A[100000], M[10000000][20], st, dr, n, m, aux;
ifstream f("rmq.in");
ofstream g("rmq.out");
int main()
{
f>>n>>m;
for(i = 0; i < n ; ++i)
f>>A[i];
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];
for (i = 0; i < m; ++i)
{
f>>st>>dr;
st--;
dr--;
aux = floor(log2(dr - st + 1));
if(A[M[st][aux]] <= A[M[dr - (1 << aux) + 1][aux]])
g<<A[M[st][aux]]<<"\n";
else
g<<A[M[dr - (1 << aux) + 1][aux]]<<"\n";
}
return 0;
}