Pagini recente » Cod sursa (job #2560586) | Cod sursa (job #715077) | Cod sursa (job #1756627) | Cod sursa (job #403254) | Cod sursa (job #3131312)
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
void pre_process(int M[][20], int A[], int N) {
int i, j;
//initialize M for the intervals with length 1
for (i = 0; i < N; i++)
M[i][0] = i;
//compute values from smaller to bigger intervals
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 n,m,v[100001], matrix[100001][20];
int main()
{ in>>n>>m;
for (int i=0;i<n;i++)
in>>v[i];
pre_process(matrix,v,n);
for(int i=0;i<m;i++)
{
int x,y;
in>>x>>y;
x--;
y--;
int k=log2(y-x+1);
out<<min(v[matrix[x][k]],v[matrix[y-(1<<k)+1][k]])<<endl;;
}
return 0;
}