Pagini recente » Cod sursa (job #2949796) | Cod sursa (job #1847035) | Cod sursa (job #1232812) | Cod sursa (job #987177) | Cod sursa (job #333541)
Cod sursa(job #333541)
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int M[100010][20],i,N,m,j,a,b;
int main() {
ifstream in;
ofstream out;
in.open("rmq.in");
out.open("rmq.out");
in >> N >> m;
for (i=0;i<N;i++) {
in >> M[i][0];
}
int l;
for (j = 1; (1 << j) <= N; j++)
for (i = 0; i + (1 << j) - 1 < N; i++)
{
l=(1 << (j - 1));
if (M[i][j - 1] <= M[i + l][j - 1])
M[i][j] = M[i][j - 1];
else
M[i][j] = M[i + l][j - 1];
}
for (int x=0; x<m; x++) {
in >> i >> j;
i--; j--;
int k=(int)(log(j-i+1)/log(2));
l=(1<<k);
if (M[i][k]<=M[j-l+1][k])
{
out << M[i][k] << "\n";
}
else
{
out << M[j-l+1][k] << "\n";
}
}
out.close();
}